다음을 사용하여 문자열을 바꾸려고합니다.
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
.
그 전에 하나쯤은 갖고 있어야 합니다 *
.
정규식으로, 뒤에 0개 이상의 등호가 오는 것을 hostname=*
의미합니다 . hostname
따라서 . sed "s/\<hostname=*\>/hostname=int1/"
hostname
hostname=int1
대조적으로, 정규 표현식은 뒤에 0개 이상의 문자가 오는 것을 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