3

sedを使用して、この$$placeholder$$のように記述されたプレースホルダーを変数のコンテンツに置き換えたいと思います。

それも可能ですか?

これは私が試したものです:

sed -i "" -e 's/\$\$placeholder\$\$/$o/g' test.txt

半分機能している場合は、$o変数の内容ではなく$$placeholder$$を$oに置き換えます

sed -i "" -e "s/\$\$placeholder\$\$/$o/g" test.txt

テキスト内の$$placeholder$$のいずれにも一致しません

よろしくお願いします。

シリル

4

4 に答える 4

1

ドルをダブルエスケープ:

sed -i "s/\\$\\$placeholder\\$\\$/$o/g" test.txt

変数に区切り文字が含まれている場合は、最初に変数に文字列置換を行うことができます。

sed -i "s/\\$\\$placeholder\\$\\$/${o//\//\\/}/g" test.txt
于 2012-12-11T16:32:44.537 に答える
1

以下を使用できます。

sed 's/\$\$placeholder\$\$/'"$o"'/g'
于 2012-12-11T16:36:55.337 に答える
0

sed は、単一行での単純な置換には優れたツールですが、それ以外 (置換での変数の使用を含む) には awk を使用するだけです。

$ cat file
foo $$placeholder$$ bar

$ o="hello
world"

$ sed 's/\$\$placeholder\$\$/'"$o"'/g' file
sed: -e expression #1, char 27: unterminated `s' command

$ awk -v o="$o" '{gsub(/\$\$placeholder\$\$/,o)}1' file
foo hello
world bar

そうすれば、スクリプトのセクションを慎重に引用することにより、sed が「特別」と見なす文字や、コマンド ラインの sed と shell の間でジャンプして混乱したりすることを心配する必要がなくなります。

于 2012-12-12T16:33:38.003 に答える
0

の周りに簡単な引用符を追加できます$o:

sed -i "" -e 's/\$\$placeholder\$\$/'$o'/g' test.txt
于 2012-12-11T16:28:27.143 に答える