web-dev-qa-db-ja.com

sedコマンドで変数を使用する方法

走ろうとしている

sed -i "/$variable/c \$variable1' file.txt

ただし、ファイルの変更は表示されません:file.txt

しかし、変数なしの同じコマンドは正常に機能します。

sed -i "/variable/c \variable1' file.txt
4
John

このようにしてください:

sed -i "/$variable/c \\${variable}1" file.txt

変更:

  1. \の前に$がある場合、シェルはリテラル$を文字列に挿入します。代わりに、追加の\を追加して最初のエスケープをエスケープし、リテラル\が出力されるようにします。

  2. 変数の直後に文字または数字がある場合は、名前を{...}で囲みます。これにより、変数は存在しないvariable1と区別されます(変数が存在しない場合、シェルは変数を何にも展開しません)短い名前を探すよりも)。

  3. 引用符と一貫性を保ち、"で始めたので、'で終わってはいけません!とにかく、変数は二重引用符内でのみ展開されます。

このようなデバッグにはechoを使用できます。出力を見ると、以下のコマンドで問題が発生していることがわかります。

echo sed -i "/$variable/c \$variable1" file.txt

と比較してください。

echo sed -i "/$variable/c \\${variable}1" file.txt
4
Graeme