sedを使用してファイルのパスを新しいパスに置き換えるには?

sedを使用してファイルのパスを新しいパスに置き換えるには?

sedを使用してファイルのパスを新しいパスに置き換えています。ここに欠けている、または存在しないものは何ですか?

# sed -i `s|/$SPLUNK_HOME/bin/splunk|/opt/splunk/bin/splunk|g' filename

私は>同意した。

答え1

`決して終了しないサブシェルステートメントを開くには、バックティック()を使用します。見積もりが一致していることを確認してください。

プロンプトは、>で定義されたセカンダリプロンプトを表示して、終了していない引用符の追加入力を探していることを知らせるシェルですPS2

スクリプトでパラメータ拡張を使用したいので、弱い引用符(")を使用してください。

たとえば、

$ cat haystack
I found some straw in here!
$ needle=straw
$ sed "s/$needle/pins/" haystack
I found some pins in here!

"弱い引用符()と強い引用符()を使用する'ときに何が起こるかを見てみましょう。

$ set -x
$ sed "s/$needle/pins/" haystack
+ sed s/straw/pins/ haystack
I found some pins in here!
$ sed 's/$needle/pins/' haystack
+ sed 's/$needle/pins/' haystack
I found some straw in here!

ご覧のとおり、弱い引用符を使用すると、シェルが$needle要求するようにパラメータ拡張が実行されます。今後 sedいつも見ることができます。二重引用符を使用するとこれは発生しないため、sed正規表現が検索されます/$needle/。つまり、「入力の末尾に文字列が続きneedleます」とは何も一致しないため、置き換えは行われません。

関連情報