sed 转义字符的异常处理

sed 转义字符的异常处理

我想删除 a 后面%到行尾的所有内容。使用

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

效果很好,但有一个例外:我想忽略任何转义百分号\%。因此,将以下文件另存为/tmp/foo.txt

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

我想要的输出是

abcd 
xyz \%xyz
xyz \%xyz

执行此操作的适当的常规异常处理是什么?

答案1

您需要查看百分比之前的字符。

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

如果前一个字符不是反斜杠,则保留该字符并删除其余字符。

此答案假设 不出%现在行的开头。如果是的话,那么我们需要检查一下

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

相关内容