2017-07-07 72 views
-1

我在RHEL 7.3文件替換行號。 myfile.txt中的第12行的樣子:慶典SED中含有一個冒號

圖片:/ currentimage/MYIMAGE

我需要一個bash腳本將其改爲:

圖片:/ newimage/otherimage

我試圖做它是這樣的:

sed -i '12s/image: /currentimage/myimage/image: /newimage/otherimage/' ./myfile 

但它失敗: sed的:未知的選項爲'S'

任何幫助極大的讚賞。

TIA。

+2

https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html#The-_0022s_0022-Command「/」字符可以被其他任何單個字符統一替換任何給定的's'命令。(其他字符代替它使用或其他)的'/'字符可以出現在正則表達式* *或*替換*只有當它是由一個\字符之前。」 – melpomene

回答

1

您使用/爲您sed分離器,它是在你的路徑中。嘗試使用|作爲分隔符來代替。

sed -i '12s|image: /currentimage/myimage|image: /newimage/otherimage|' ./myfile

另外,你可以像這樣\/文件路徑逃避每個/

+1

你可以提到有可能逃跑的分隔符,當你不希望它表現爲這樣的,即使它這將是多大的在這種情況下麻煩。 – Aaron

+1

@Kip K謝謝,這工作正常。我不知道你可以這樣做。我想是關注冒號作爲我的問題的來源,而不是轉義字符。管道解決方案非常易於閱讀。 –

1

如果你可以使用Awk,這是很簡單的關於使用NR變量,它代表正在處理的行第12行移動,

awk 'NR==12{$2="/newimage/otherimage/"}1' myfile > tmp && mv tmp myfile 

的部分> tmp && mv tmp myfile相當於在sed-i選項對於間接的方式來就地修改文件。