次のコマンドを使用して文字列を置き換えようとしています。
sed -e "s/\<$5\>/$6/g" "$2/$1" > "$4/$3"
$5-> "hostname=*"
$6-> "hostname=int1"
$2/$1-> "source file path"
$4/$3-> "destination file path"
次のものを交換しようとすると:
hostname=abc
わかった
hostname=int1=abc
でも私はしたい、
hostname=int1
文字列を一致させるにはどうすればよいですか?
sed
は正規表現を使用します。これらは、シェルが使用するパターン(「グロブ」)とは異なります。
以下は機能しないことに注意してください。
$ echo hostname=abc | sed "s/\<hostname=*\>/hostname=int1/"
hostname=int1=abc
ただし、次のことは行います。
$ echo hostname=abc | sed "s/\<hostname=.*\>/hostname=int1/"
hostname=int1
.
の前に*
が必要です。
正規表現として、hostname=*
はhostname
の後に0個以上の等号が続くことを意味します。したがって、sed "s/\<hostname=*\>/hostname=int1/"
はhostname
をhostname=int1
に置き換えます。
対照的に、正規表現hostname=.*
は、hostname=
の後に0個以上の任意の文字が続くことを意味します。そのため、s/\<hostname=.*\>/hostname=int1/
はhostname=abc
をhostname=int1
に置き換えます。
これよりも良い解決策があるかもしれませんが、以下のコマンドを使用できます。
sed /hostname.*$/s//"hostname=int1"/g /home/path/of/your/original/file > /tmp/hello.$$
cat /tmp/hello.$$ > /home/path/of/your/original/file