次のように文字列を置き換えようとしています。
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
これを達成するために文字列をどのように一致させることができますか?
答え1
sed
正規表現を使用してください。これはシェル(「glob」)で使用されるパターンとは異なります。
以下は機能しません。
$ echo hostname=abc | sed "s/\<hostname=*\>/hostname=int1/"
hostname=int1=abc
ただし、以下は実行されます。
$ echo hostname=abc | sed "s/\<hostname=.*\>/hostname=int1/"
hostname=int1
.
その前に一つは持っていなければなりません*
。
正規表現として、後にゼロ個以上の等号が来ることをhostname=*
意味します。hostname
したがって 、sed "s/\<hostname=*\>/hostname=int1/"
hostname
hostname=int1
対照的に、正規表現は後ろにゼロ個以上の文字が続くことをhostname=.*
意味します。hostname=
だから。s/\<hostname=.*\>/hostname=int1/
hostname=abc
hostname=int1
答え2
これより良い解決策があるかもしれませんが、次のコマンドを使用できます。
sed /hostname.*$/s//"hostname=int1"/g /home/path/of/your/original/file > /tmp/hello.$$
cat /tmp/hello.$$ > /home/path/of/your/original/file