$new
他の変数に使用して保存したファイルの3行を置き換える必要がある変数には、3行の数字が格納されています。私の考えでは。しかし、エラーが発生します。grep
$old
sed "s/$old/$new/g" input > output
sed: 1: "s/\( 28.47969107 0. ...": unterminated substitute pattern
私の入力ファイルは次のとおりです。
scale
1.000
primitive lattice vectors
28.47969107 0.00000000 0.00000000
0.00000000 28.47969107 0.00000000
0.00000000 0.00000000 28.47969107
grid dimensions
100 100 100
私$old
は善です
28.47969107 0.00000000 0.00000000
0.00000000 28.47969107 0.00000000
0.00000000 0.00000000 28.47969107
$new
形式は以前と同じで数字のみが異なります。
ベストアンサー1
sed -e "/$old/i$new" -e "/$old/{N;N;d}" input > output
どこ
$old
28.47969107
最初の行でも最初の行でもかまいません。28.47969107 0.00000000 0.00000000
$new
形態にならなければならない28.47969107 0.00000000 0.00000000\n0.00000000 28.47969107 0.00000000\n0.00000000 0.00000000 28.47969107
-z
変数からエスケープする別の方法(最新のGNU sed(バージョン> 4.2.1)とオプションがある場合):newline
sed -z "s/$(printf "%b" "$old"|sed '$!s/$/\\/')/$(printf "%b" "$new"|sed 's/$/\\/')/" input > output
または、スクリプト割り当て機能で置き換えると
end_esc(){ printf "%b" "$@"|sed '$!s/$/\\/' ; }
sed -z "s/$(end_esc $old)/$(end_esc $new)/" input > output