2013-04-22 79 views
1

我試圖用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」。

幫助非常感謝!

回答

3

您需要「抓住」零件然後再次打印。

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

格式\([[:alpha:]]\)\.\([[:alpha:]]\)表示XXX.YYY。然後你用\1§\2打印它們,第一部分是\1,第二部分是\2 ...包裹在\(... \)之間。

如果您想了解更多信息,該參考可以幫助你:RegExp - keeping parts of a pattern in sed

+1

+1直接給點意見! – Kent 2013-04-22 12:57:32

+1

@Roadhouse,如果此答案或kch解決了您的問題,請考慮接受其中一個問題,以便清楚您的問題已完成,並且對於下一個進入此頁面的人員非常有用。 – fedorqui 2013-04-22 14:18:57

0

出於某種原因sed不喜歡我,但這裏有perl同樣的事情:

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

的正則表達式的功能,你正在尋找被稱爲「捕獲」。

更新:由於某種原因-E是需要sed

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