7

入力を処理しており (ls -la --color などのソースから)、テキストの特定のセクションに下線を引いています。これらの入力を文字ごとに処理するのではなく、多くの正規表現を使用するため、影響を与えている部分文字列が既に色付けされているか太字になっているかを追跡するのがかなり難しくなります。赤いテキスト ブロックがあり、その一部に下線を引きたい場合は、次のようにします。

s/(123)/\033[4m\1\033[0m/g

(私の式はもっと複雑です。実際には、一致を抽出して独自に処理し、さらに分解して分析しています。これは、ここで指定した式を変更することによって実行できるものではありません。)

上記のコードは、出現する 123 をすべて [UNDERLINE_START]123[FORMAT_RESET] に置き換えます。残念ながら、リセットするとテキストの色もオフになります。下線だけを無効にしたいときに下線を無効にできれば、頭痛の種を大幅に節約できますが、それを行う方法はないと確信しています。私が間違っていると誰か教えてくれますか?

編集:下線をオフにしたい場合、現在のテキストの色に影響を与えずにそれを行うことができますか?その色が何であるかを検出する方法は?

4

2 に答える 2

12

誰もそれを文書化していないようですが、デコレータコードに20を追加すると、それらがオフになります。

  echo -e "\\033[34;4m" underlined "\\033[24m" not underlined
  echo -e "\\033[34;1m" bold "\\033[2m" not bold
  echo -e "\\033[34;2m" dark "\\033[22m" not dark
  echo -e "\\033[34;7m" inverse "\\033[27m" not inverse
于 2013-03-22T23:34:33.590 に答える