2014-09-03 105 views
0

我想匹配並替換大量文件中的字符串。匹配字符串加上任何非空白字符並插入空格

要搜索的字符串:

</ANON>[any non-whitespace char], e.g. "</ANON>." or "</ANON>)" 

我想在標籤和非空白字符之間堅持一個空白。

我曾嘗試使用類似sed來做到這一點:

sed -i -e 's/<\/ANON>/S/<\/ANON> /S/g' 

但很可惜,這是行不通的。

任何幫助非常感謝。

+0

你想要的輸出是什麼? – 2014-09-03 19:26:09

+0

使用\ S替代/ S來表示非空格字符 – terrywb 2014-09-03 19:29:16

+0

與標記和非空白字符之間使用空格的輸入相同。 – SupsH 2014-09-03 19:29:36

回答

2

嘗試以下操作:

sed -i -e 's|\(</ANON>\)\([^[:space:]]\)|\1 \2|g' file 

這不是Perl和你不能使用\ S非空格字符。你也應該捕獲組並將它們用於替換零件。你也不能使用/ S,因爲1)它是錯誤的2)sed用於分離具有模式,替換和標記的部分的斜線。

P.S.或者你可以使用Perl,如果你喜歡:

perl -p -i -e 's|(</ANON>)(\S)|$1 $2|g' file 
+0

除了一堆以外,這似乎是個伎倆。 ,)和數字。 – SupsH 2014-09-03 19:34:59

+0

好吧,我不知道爲什麼,但幾次運行perl命令最終都抓住了它們。非常感謝,夥伴。 – SupsH 2014-09-03 19:39:06

+0

可能因爲你在一行中有多個模式。要取代所有這些,只需添加'g'修飾符(我已經更新了我的答案) – 2014-09-03 20:17:12