すべて:
sedを使用して2つの条件で行をフィルタリングするにはどうすればよいですか?
aptitude -v show '?name(grep)' | egrep --color=always "^|grep" | sed 's/^\(Package: .*\)$/\x1b[33;1m\1\x1b[0m/'
上で私が望むのは、まずgrepを使用して検索文字列(この場合は「grep」)と一致する項目に色を付け、次に適性出力のすべての「Package:...」ヘッダー行をgrepすることです。黄色で表示されます。 。ただし、以前にegrep ...コマンドを介して「Package:...」行に赤が追加されている場合、その行は黄色で始まり、見つかった「grep」文字列に対して赤に変換され、見つかった場合は赤に戻ります。 。 '\e[0m' は期待どおりに通常の色に変わります。
したがって、私がする必要があるのは、「Package:...」行を見つけて、その行から可能な色コードを削除し、行全体を黄色で塗りつぶすことです。
sed "s,\x1B\[[0-9;]*[a-zA-Z],,g"
...コードは削除されますが、「Package:....」で始まる行でのみ実行できます。注文は何ですか?それともこれを行うよりエレガントな方法がありますか?
答え1
man sed
あなたに言うでしょう:
Sed commands can be given with ... one address, in which case the
command will only be executed for input lines which match that address;
...
/regexp/
Match lines matching the regular expression regexp.
だからあなたはこれを行うことができます:
sed '/Package/ s/replace/stuff/'