2017-07-07 45 views
-1

私はRHEL 7.3です。私がやってみました/ NEWIMAGE/otherimagebash sedコロンを含むファイルの行番号を置き換えます。

画像:

画像:/ currentimage/MYIMAGE

私はそれを変更するにはbashスクリプトを必要とするようにmyfile.txtのの12行目に見えますそれこの方法:

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「 '/'文字は、一意に他の任意の1文字で置き換えることができます任意の 's'コマンド'/'文字(またはその代わりに使用される他の文字)は、\ regexp *または* replacement *の前に\文字がある場合にのみ使用できます。 – 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 myfilesed-iオプションと同等ですファイルをインプレースで変更する間接的な方法です。

関連する問題