2015-04-06 40 views
0

我試圖用另一個字符串(replacementstr)替換文件中下劃線不相鄰的所有字符串(str)。這不與工作sed與文件中的負向前

sed -i 's/^(?!_str_|_str|str_)(str)$/replacementstr/g' /home/somefile.txt 
+2

你可以把樣品數據和你的預期產出? –

+1

'sed'的哪個特定版本? POSIX-baseline sed不支持PCRE擴展。 –

+0

(順便說一句,'sed -i'也是一個非POSIX擴展; POSIX標準化的就地編輯工具是'ed'和'ex' - 如果你知道如何在命令模式下使用vim,你已經知道'ex')。 –

回答

3

你不需要負先行在所有的這 - 和你得到的狀態機將沒有它更有效(這意味着你即使你的發動機不使用它會更好確實支持他們)。

sed -r 's/(^|[^_])str([^_]|$)/\1replacement\2/g' 
+2

不錯!可能值得一提的是你需要'-r'才能夠避開括號。 – fedorqui

+1

很對,那。我避免使用,因爲我不想(甚至隱含地)支持'-i',但是由於我給了ERE,這是不可避免的。 –

+0

感謝您的幫助! – hotkarl