sed를 사용할 때 점 앞에 백슬래시를 추가해야 합니다.

sed를 사용할 때 점 앞에 백슬래시를 추가해야 합니다.

mn.ftg.comambari-agent.ini아래와 같이 파일에서 server_를 localhost로 바꿔야 합니다.

echo $machine
server_mn

echo $domain
ftg.com

more ambari-agent.ini
[server]
hostname=localhost

다음과 같이 점 앞에 백슬래시를 추가해야 합니까?

sed "s/hostname=localhost/hostname=$machine\.$domain/g"  ambari-agent.ini

아니면 안전하게 수행하세요(백슬래시 없이).

sed "s/hostname=localhost/hostname=$machine.$domain/g"  ambari-agent.ini

답변1

점은 정규식의 일부이고 리터럴 점과 일치해야 하는 경우에만 이스케이프해야 합니다. 리터럴 포인트를 정규 표현식과 일치시키려면 \.또는 를 사용할 수 있습니다 [.].

s그러나 표현식에서 대체 부분은 다음 sed과 같습니다.아니요정규식.

백슬래시를 사용하여 이스케이프해야 하는 유일한 문자는 \, &, 개행 및 s명령 구분 기호( /사용된 경우 s/pattern/replacement/)입니다.

이것은 당신의 명령을 의미합니다

sed "s/hostname=localhost/hostname=$machine.$domain/g"  ambari-agent.ini

이는 관련된 변수의 값이 위의 규칙을 준수하는 한 작동합니다. 개인적으로 나는 또한 표현식을 줄의 시작 부분에 고정하고 명령 g에서 플래그를 제거할 것입니다.s

관련 정보