私は、(最適な)改行で長いテキストを書式設定するのに(GNU)fmt
を使用します。ただし、テキストにANSIカラーエスケープシーケンス(表示されず、テキストを表示するときにのみ色付けされます)が含まれている場合、fmt
はこれらを通常の文字とみなし、間違った行の長さを計算します。fmtからANSIカラーエスケープコードを隠す方法
ここではリテラルエスケープ文字がどれくらいうまく機能するかはよく分かりませんが、ここではgrep
を使用してANSIシーケンスを生成する簡単な例を示します。フォーマットするために長い文字列から始めましょう。
echo $string | grep --color=no i | fmt -w 50
をしかし、我々はハイライト場合は/それらを色付け、fmt
は文字「i」がはるかに長いことを含む行を考慮:
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=yes i | fmt -w 50
これを回避する方法はありますか?この例では、もちろん、fmt
の前にgrep
を使用することもできますが、検索文字列が複数の単語にまたがる場合、これは機能しません。
ありがとうございました。それが私が使い終わった解決策です。 これを実際に使用するには、実際には 'grep'の代わりに' sed'が必要です。基本的に、タグ( 'this is an | example | string'の' | 'など)をANSIカラーシーケンスに変換して、それらの単語に色付けします。 'fmt'を使うと最適化されていないので、タグはスペースを取るので、単語の折り返しに影響しますが、行に非常に多くのタグが含まれていなければそれほど悪くはありません。置き換えます(ANSIエスケープシーケンスはさらに多くの文字を取ります)。 –