5

私は(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に使用できますが、検索文字列が複数の単語にまたがる場合、これは機能しません。

4

3 に答える 3

5

grepとfmtを使用してそれを解決する良い方法はないようです。最初にfmtを実行してから、grepの代わりにsedを使用して検索することをお勧めします。例えば:

echo検索文字列は赤で強調表示されます。| fmt -w 50 | sed ":a; $!N; $!ba; s / search [\ n] string / \ x1b \ [1; 31m&\ x1b \ [0m / g"
于 2009-07-13T00:43:06.233 に答える
0

代わりに`grep--colour = auto'を使用すると、問題が解決します。

于 2013-02-16T17:04:45.207 に答える
0

これにはhmtを使用できます。これはまさにこのシナリオのために考案されました。

注:私はの作者ですhmt

于 2018-09-09T13:45:26.743 に答える