我正在尝试使用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”。
非常感谢帮助!
答案 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'