sed过滤器替换'!'期间和'!!'在行尾的句号

时间:2010-11-11 08:47:05

标签: bash unix scripting sed end-of-line

我想编写一个sed过滤器,将输入中的所有句点更改为感叹号,除非句点位于一行的末尾,在这种情况下,句点将替换为2个感叹号(即!!)。

到目前为止,这就是我所拥有的:

sed -e 's/\./\!/g' -e 's/\!\n/\!\!\n/g' input_exp

其中input_exp是一个写有几个句子的文件。该命令不起作用。 '\ n'不是unix / bash中正确的行尾字符吗?在'\ n'之前我需要额外的'\'吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

sed -e 's_\.$_!!_g' -e 's_\._!_g' input_exp

我使用_而不是/来获得稍高的可读性。您也可以使用

sed -e 's/\.$/!!/g' -e 's/\./!/g' input_exp

当然,如果你愿意的话。 \n代表换行符,与行尾不同。

答案 1 :(得分:2)

在正则表达式中使用$作为“行尾”。