텍스트를 다른 텍스트로 바꾸기

텍스트를 다른 텍스트로 바꾸기

문자열을 다른 문자열로 바꾸고 싶습니다. 예: 다음 텍스트를 변경하고 싶습니다.

"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의 모든 항목이 대체됩니다 (그러나 일치하는 줄에서만).5340

출력 예:

$ 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교체에는 좋지만 grepcoresct 라인을 선택하는 데는 더 좋습니다.

관련 정보