我想编写一个sed过滤器,将输入中的所有句点更改为感叹号,除非句点位于一行的末尾,在这种情况下,句点将替换为2个感叹号(即!!)。
到目前为止,这就是我所拥有的:
sed -e 's/\./\!/g' -e 's/\!\n/\!\!\n/g' input_exp
其中input_exp是一个写有几个句子的文件。该命令不起作用。 '\ n'不是unix / bash中正确的行尾字符吗?在'\ n'之前我需要额外的'\'吗?
感谢您的帮助。
答案 0 :(得分:3)
sed -e 's_\.$_!!_g' -e 's_\._!_g' input_exp
我使用_
而不是/
来获得稍高的可读性。您也可以使用
sed -e 's/\.$/!!/g' -e 's/\./!/g' input_exp
当然,如果你愿意的话。 \n
代表换行符,与行尾不同。
答案 1 :(得分:2)
在正则表达式中使用$
作为“行尾”。