私は(GNU)を使用fmt
して、長いテキストを適切な(「最適な」)改行でフォーマットします。ただし、テキストにANSIカラーエスケープシーケンス(表示されることはなく、表示時にテキストに色を付けるためだけに使用される)が含まれている場合、fmt
これらは通常の文字と見なされ、間違った行の長さが計算されます。
ここでリテラルエスケープ文字がどのように機能するかわからないためgrep
、ANSIシーケンスを生成するために使用する簡単な例を次に示します。フォーマットする長い文字列から始めましょう。
string="Here’s an example of a rather long \
string with quite a few words in the middle \
that grep chooses to colour red."
一致を強調表示しない場合grep
、すべてが正常に機能します。
echo $string | grep --color=no i | fmt -w 50
しかし、それらを強調表示/色付けするfmt
と、文字「i」を含む行は実際よりもはるかに長いと見なされ、端末に表示されるとかなり短い行として表示されます。
echo $string | grep --color=yes i | fmt -w 50
これを回避する方法はありますか?この例では、もちろんfmt
前 grep
に使用できますが、検索文字列が複数の単語にまたがる場合、これは機能しません。