2016-07-11 7 views
0

は私が変更しようとしている使用して(フルパス名)の行を変更する:私は、次のコマンドライン試した<code>#!/usr/bin/python</code></p> <p><code>#!/usr/bin/python2.6</code>にSED `S`操作

sed -i -e 's/.#!/usr/bin/python.*/#!/usr/bin/python2.6/' /usr/bin/yum 

...返します次のエラーが表示されます。

sed: -e expression #1, char 11: unknown option to `s' 

私はどこでも良い答えが見つかりませんでした。

ありがとうございます。

答えて

2

あなたの最初のs earchが&代わるコマンドとしてseds/.#!/usr/bを解釈し、bは、コマンドの有効なフラグではありませんので、あなたはこのエラーを取得しています。
実際、これらのコマンドの構文はs<delimiter><search pattern><delimiter><replace><delimiter><flags>です。最も広く使用されている<delimiter>/です。

検索パターンで/をエスケープして文字列を置き換えることで、区切り文字として解釈されないようにすることができますが、たくさんあるので別の区切り文字を使用することをお勧めします。

たとえば、+を区切り文字として使用すると、sedコマンドはsed -i -e 's+.#!/usr/bin/python.*+#!/usr/bin/python2.6+'になります。シェバングはそれがに表示されたファイルの先頭で直接記述する必要がありますように、サイドノートとして、あなたのコマンドの最初の.はおそらく間違いです

1

私はあなたのラインはから最初の行であることを前提としていあなたのファイル。 GNU sedので:

sed '1s/python$/&2.6/' file 

を、あなたのファイルを編集したい場合は、「場所に」使用者のsedのオプション-i

+0

最初の行が "python3"で終わっていても、それはしません。 OTOHは "python $"で終わっていると分かっています: 'sed '1s/$/2.6 /'' – agc

+0

私は 'python3'を変更したり、' bash'を 'bash2.6'に変更したくありません。 – Cyrus

+1

1. OPは '... python。*'をターゲットの末尾として使用するため、 'python $'は 'python3'などがありません。2. Re 'bash': " $ '" – agc

関連する問題

 関連する問題