この行を含むテキストファイルがあります。
set stime = '0 0'
それを次のように変更する必要があります。
set stime = '0 4'
私はこれらのコマンドを試しました:
sed -i 's/original/new/g' file.txt
そして
awk '{gsub(/pattern/,"replacement")}' file
しかし、それらは機能しません。パターンのアポストロフィが原因だと思います。これを正しく行うにはどうすればよいですか?
単一引用符'
をエスケープするには、二重引用符"
を使用する必要があります。
インプレースで更新するには、sed -i
を使用する必要があります
次のコードはインプレースで更新し、一重引用符をエスケープする必要があります。
sed -i "s/set stime = '0 0'/set stime = '0 4'/g" input_file_name
いくつかの選択肢があります。
Sedまたはawkコマンドには、一重引用符ではなく二重引用符を使用します。
sed -i "s/set stime = '0 0'/set stime = '0 4'/g" file
または
awk "{gsub(/set stime = '0 0'/,\"set stime = '0 4'\")}1;" file
パターンをシェル変数に保存し、二重引用符を使用します。
replacement="set stime = '0 4'"
pattern="set stime = '0 0'"
それから
sed "s/$pattern/$replacement/g" file
または
awk -vpat="$pattern" -vrep="$replacement" '{gsub(pat,rep)}1;' file
パターン全体を使用しないでください。正しい行を見つけて、変更する必要があるものだけを置き換えて、引用符を避けてください。たとえば、set stime
が1つしか存在しない場合、次のことができます。
sed '/set stime/{s/0 0/0 4/}' file
または
awk '$1=="set" && $2=="time"{sub("0 0","0 4")}1' file