我正在处理输入(来自但仅限于 ls -la --color 等来源)并在文本的某些部分下划线。我不会逐个字符地处理这些输入,而是使用大量正则表达式,这使得跟踪我正在影响的子字符串是已经着色还是粗体变得相当困难。如果我有一个红色的文本块,并且我想在其中的某些部分下划线,我可能会执行以下操作:
s/(123)/\033[4m\1\033[0m/g
(我的表达式要复杂得多。实际上,匹配项是自己提取、处理的,然后进一步分解和分析。这不是通过更改我在这里给出的表达式可以完成的事情。)
上面的代码会将所有出现的 123 替换为 [UNDERLINE_START]123[FORMAT_RESET]。不幸的是,重置也会关闭文本的着色。如果我可以在我只想禁用下划线时关闭下划线,那会为我省去很多麻烦,但我很确定没有办法做到这一点。谁能告诉我我错了?
编辑:我可以通过询问来简化问题:如果我想关闭下划线,我可以在不影响当前文本颜色的情况下这样做吗,因为该颜色可能在我的脚本开始执行之前很久就设置好了,而我没有一种检测颜色是什么的方法?