我想删除 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/'