我有以下內容的文件:替換爲兩個已知串之間的未知字符串sed的
WORD1 WORD2 WORD3
如何使用sed來代替WORD1和WORD3之間的串foo
,使得該文件的內容更改爲以下?:
WORD1 foo WORD3
我嘗試以下,但顯然我失去了一些東西,因爲不會產生預期的效果:
sed -i '' 's/WORD1.*WORD3/foo/g' file.txt
我有以下內容的文件:替換爲兩個已知串之間的未知字符串sed的
WORD1 WORD2 WORD3
如何使用sed來代替WORD1和WORD3之間的串foo
,使得該文件的內容更改爲以下?:
WORD1 foo WORD3
我嘗試以下,但顯然我失去了一些東西,因爲不會產生預期的效果:
sed -i '' 's/WORD1.*WORD3/foo/g' file.txt
sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt
或
sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt
您可能需要逃避圓括弧,取決於你的sed的變種。
我應該怎麼做才能讓WORD1,WORD2和WORD3成爲任何字符串? –
@ValeriyVan,你需要避免在你的WORDs('/')中分隔字符以及所有其他字符,'sed'視爲控制字符。 – vyegorov
含量的樣品的file.txt
$ cat file.txt
WORD1 WORD2 WORD3
WORD4 WORD5 WORD6
WORD7 WORD8 WORD9
(在評論@DennisWilliamson校正)
$ sed -e 's/\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)/\1 foo \3/' file.txt
WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9
而awk
是某種簡單
$ awk -F' ' '{ print $1" foo "$3 }' file.txt
WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9
沒有必要逃離任何空間。 ''^''意思是「空格或反斜槓以外的任何字符,我會建議使用'\ +'而不是'*',因爲您的命令可以替換空行,而'g'也是不必要的 - 因爲 –
@DennisWilliamson,感謝您的評論,謝謝 – Rony
現在它根本不起作用,您誤解了我的意思。'sed -e's/\([^] \ + \)\ + \( [^ [:] \ + \)\ + \(。* \)/ \ 1 foo \ 3 /'file.txt' –
這可能會爲你工作:
sed 's/\S\+/foo/2' file
或者是:
sed 's/[^[:space:]][^[:space:]]*/foo/2' file
如果WORD1
和WORD3
發生了不止一次:
echo "WORD1 WORD2 WORD3 BLA BLA WORD1 WORD4 WORD3" |
sed 's/WORD3/\n&/g;s/\(WORD1\)[^\n]*\n/\1 foo /g'
WORD1 foo WORD3 BLA BLA WORD1 foo WORD3
'[^ [:space:]] [^ [:space :]] *''可以替換爲'[^ [:space:]] \ +'(就像你在第一個例子中使用過的)''sed'的某些版本。'/ 2'是一個很好的接觸。 1 –
莫不是像' WORD1 foo WORD3 bar WORD1 baz WORD3' in your string(i。即每個字符串有多個匹配項)? –
啊 - 很好的問題,但不是,在這種情況下並不需要適應多個比賽。 –