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