1

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

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

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

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

谢谢你的帮助。

4

2 回答 2

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

我使用_而不是/为了提高可读性。你也可以使用

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

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

于 2010-11-11T09:13:06.197 回答
2

用于$正则表达式中的“行尾”。

于 2010-11-11T08:50:05.797 回答