문자열을 다른 문자열로 바꾸고 싶습니다. 예: 다음 텍스트를 변경하고 싶습니다.
"listen_addresses = ['127.0.0.1:53', '[::1]:53']"
다음 텍스트로
"listen_addresses = ['127.0.0.1:40', '[::1]:40']"
나는 다음 명령을 시도했습니다.
sudo sed "s#listen_addresses \= \['127\.0\.0\.1\:53'\, '\[\:\:1\]\:53'\]'#listen_addresses \= \['127\.0\.0\.1\:40'\, '\[\:\:1\]\:40'\]#g"
나는 다음과 같은 결과를 얻었습니다.
입력하다:listen_addresses = ['127.0.0.1:53', '[::1]:53']
산출:listen_addresses = ['127.0.0.1:53', '[::1]:53']
내가 뭘 잘못했나요?
답변1
주석에 설명된 대로 [
및 만 ]
이스케이프됩니다.
echo "listen_addresses = ['127.0.0.1:53', '[::1]:53']" |
sed -e "s#listen_addresses = \['127.0.0.1:53', '\[::1\]:53'#listen_addresses = ['127.0.0.1:40', '[::1]:40'#"
이것은
listen_addresses = ['127.0.0.1:40', '[::1]:40']
답변2
넌 할 수있어:
sed "/^listen_addresses = \['127\.0\.0\.1:53', '\[::1\]:53'\]$/s/53/40/g" file
- 찾다정밀한끈
listen_addresses = ['127.0.0.1:53', '[::1]:53']
- 문자열이 일치하면 with
s/53/40/g
의 모든 항목이 대체됩니다 (그러나 일치하는 줄에서만).53
40
출력 예:
$ cat file
listen_addresses = ['127.0.0.1:53', '[::1]:53']
listen_addresses = ['127.0.0.2:53', '[::1]:53']
$ sed "/^listen_addresses = \['127\.0\.0\.1:53', '\[::1\]:53'\]$/s/53/40/g" file
listen_addresses = ['127.0.0.1:40', '[::1]:40']
listen_addresses = ['127.0.0.2:53', '[::1]:53']
보시다시피 교체를 수행하려면 정확한 일치가 필요합니다.
답변3
sed s/":53'"/":40'"/g <<<"listen_addresses = ['127.0.0.1:53', '[::1]:53']"
당신이 요청한 것과 비슷한 일을 하십시오. 하지만 @Jeff Schaller의 의견에 동의합니다!
귀하의 질문으로 판단하면 왜 손으로 직접 수행하지 않는지 아는 사람이 없습니까? 귀하의 라인은 어떤 텍스트에서 왔으며 어떻게 다릅니까? 정규식은 어떤 변형을 다루어야 합니까?
sed
교체에는 좋지만 grep
coresct 라인을 선택하는 데는 더 좋습니다.