用sed替换字符包围的句点

时间:2013-04-22 12:45:49

标签: bash sed

我正在尝试使用sed替换文本文件中的某些句点。我的文件是这样的:

a.b
aa.bb
aa. b
a . b

我要做的是用'§'替换之前和之后有字符的句点。在这种情况下,“a.b”和“aa.bb”。 我已经设法用grep做了然后sed:

egrep '[[:alpha:]]\.[[:alpha:]]' | sed 's/\./§/g'

但这不会让我继续操纵文件。如果我尝试

sed 's/[[:alpha:]]\.[[:alpha:]]/§/g'

它会将“a.b”之类的字符串替换为“§”而不是“a§b”。

非常感谢帮助!

2 个答案:

答案 0 :(得分:3)

您需要“捕捉”部件然后再次打印。

sed 's/\([[:alpha:]]\)\.\([[:alpha:]]\)/\1§\2/g'

格式\([[:alpha:]]\)\.\([[:alpha:]]\)表示XXX.YYY。然后,您使用\1§\2打印它们,第一部分为\1,第二部分为\2 ...... \( ... \)之间。{/ p>

如果您需要更多信息,此引用可能会对您有所帮助:RegExp - keeping parts of a pattern in sed

答案 1 :(得分:0)

出于某些原因,sed不喜欢我,但perl与此相同:

perl -pe 's/(\w)\.(\w)/$1§$2/g'

您正在寻找的正则表达式功能称为“捕获”。

更新:由于某些原因,-E需要sed

sed -E 's/([[:alpha:]])\.([[:alpha:]])/\1§\2/g'