sed エスケープ文字の例外処理

sed エスケープ文字の例外処理

%aから行末まですべて削除したいと思います。使用

cat /tmp/foo.txt | sed 's/%.*$//'

1つの例外を除いて、素晴らしい動作します。無視したいです。どのエスケープパーセント記号\%。したがって、次のファイルを次のように保存します。/tmp/foo.txt

abcd %123
xyz \%xyz
xyz \%xyz %123

私が望む出力は

abcd 
xyz \%xyz
xyz \%xyz

これを行うのに適した一般的な例外処理は何ですか?

ベストアンサー1

パーセントの前にある文字を見てください。

sed 's/\([^\\]\)%.*/\1/'

前の文字がバックスラッシュでない場合、その文字は保持され、残りの文字は削除されます。

%この答えは行の先頭には発生しないと仮定します。もしそうなら、私たちは確認する必要があります

sed 's/\(^\|[^\\]\)%.*/\1/'

おすすめ記事