sed:検索内で検索

sed:検索内で検索

すべて:

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/'

おすすめ記事