1

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

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

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

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

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

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

它将像“ab”这样的字符串替换为“§”而不是“a§b”。

非常感谢帮助!

4

2 回答 2

3

您需要“捕捉”这些零件,然后再次打印它们。

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

格式\([[:alpha:]]\)\.\([[:alpha:]]\)表示XXX.YYY。然后你打印它们\1§\2,作为\1第一部分,\2第二部分......包裹在中间\( ... \)

如果您想了解更多信息,此参考资料可能会对您有所帮助:RegExp - 在 sed 中保留部分模式

于 2013-04-22T12:49:23.657 回答
0

出于某种原因sed不喜欢我,但这里有同样的事情perl

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

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

更新:出于某种原因-E需要sed

sed -E 's/([[:alpha:]])\.([[:alpha:]])/\1§\2/g'
于 2013-04-22T12:51:58.087 回答