bash에서 하위 문자열이 일치하면 전체 문자열 바꾸기

bash에서 하위 문자열이 일치하면 전체 문자열 바꾸기

하위 문자열이 문자열의 일부와 일치하는 경우 문자열을 바꾸려고 하는데 이를 수행할 수 없습니다. 하위 문자열의 전체 문자열을 일치시키는 정규식은 무엇입니까? 여기에 내 코드와 이를 적용하려는 파일이 있습니다.

#!/bin/bash -x
STR='Server'
RSTR='puppetserver'
{ while IFS='=' read name ip
    do
        if [[ "$STR" == *${name}* ]]; then
        sed -i -e "s/*${name}*/${RSTR}/g"
        echo "Replaced with ${RSTR}."
fi
    done
} < file.txt

파일.txt

Puppet-Agent-01 = 18.208.175.32
Puppet-Agent-02 = 18.207.194.126
Puppet-Agent-03 = 3.86.54.233
Puppet-Server-01 = 54.224.89.3

답변1

$ cat file
Puppet-Agent-01 = 18.208.175.32
Puppet-Agent-02 = 18.207.194.126
Puppet-Agent-03 = 3.86.54.233
Puppet-Server-01 = 54.224.89.3
$ awk -F ' = ' 'BEGIN { OFS=FS } $1 ~ /Server/ { $1 = "puppetserver" }; 1' file
Puppet-Agent-01 = 18.208.175.32
Puppet-Agent-02 = 18.207.194.126
Puppet-Agent-03 = 3.86.54.233
puppetserver = 54.224.89.3

이는 파일을 -구분된 행 세트로 취급합니다  = . 첫 번째 필드가 일치하면 Server문자열로 대체됩니다 puppetserver. 그런 다음 다음 줄을 출력하십시오.

쉘 변수에서 문자열 합계를 가져옵니다 Server.puppetserver

awk -v patstring="$STR" -v repstring="$RSTR" -F ' = ' \
    'BEGIN { OFS=FS } $1 ~ patstring { $1 = repstring }; 1' file

또는 환경 변수에서:

export STR RSTR
awk -F ' = ' 'BEGIN { OFS=FS } $1 ~ ENVIRON["STR"] { $1 = ENVIRON["RSTR"] }; 1' file

대신 사용하십시오 sed:

sed 's/^[^=]*Server[^=]*=/puppetserver =/' file

Server이는 문자가 아닌 문자로 둘러싸인 문자열과 =최대 한 =문자를 일치시키고 로 대체합니다 puppetserver =.

관련 정보