1. ホーム
  2. bash

Bash変数によるsed置換

2023-10-23 07:41:43

質問

Bashスクリプトでsedを使ってテキストファイルの値を変更しようとしているのですが、以下のような行があります。

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp

これは for のループになります。なぜうまくいかないのでしょうか?

どのように解決するのですか?

内部の変数 ' の中の変数はBashでは代入されません。文字列置換(Perlに慣れている人なら補間)を行うには、二重引用符を使うように変更する必要があります。 " を使うように変更する必要があります。

# Enclose the entire expression in double quotes
$ sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp

# Or, concatenate strings with only variables inside double quotes
# This would restrict expansion to the relevant portion
# and prevent accidental expansion for !, backticks, etc.
$ sed 's/draw('"$prev_number"';n_)/draw('"$number"';n_)/g' file.txt > tmp

# A variable cannot contain arbitrary characters
# See link in the further reading section for details
$ a='foo
bar'
$ echo 'baz' | sed 's/baz/'"$a"'/g'
sed: -e expression #1, char 9: unterminated `s' command



さらに読む。