sed를 사용하여 문자열의 값을 바꾸지만 문자열은 그대로 유지하는 방법

sed를 사용하여 문자열의 값을 바꾸지만 문자열은 그대로 유지하는 방법

sed를 사용하여 문자열의 값을 바꾸면서 문자열을 그대로 유지하는 방법은 무엇입니까?

예를 들어echo "01XX1234"

XX16진수 값으로 바꾸고 합계를 01변경하지 않고 유지하고 싶습니다 1234. 제가 생각할 수 있는 모든 조합을 시도했지만 sed여전히 패배했습니다.

이렇게 할 수는 있지만 더 쉬운 방법이 있나요?

echo "01XX1234" | sed -n 's/\(01..1234\)/01AB1234/g'

답변1

sed문자열의 일치하는 하위 문자열만 대체됩니다.

$ echo '01XX1234' | sed 's/XX/AF/'
01AF1234

세 번째와 네 번째 문자는 항상 바꾸고 첫 번째와 두 번째 문자는 변경하지 않으려면 다음을 사용할 수 있습니다.

$ echo '01XX1234' | sed 's/\(.\{2\}\).\{2\}/\1AF/'
01AF1234
  • \{2\}앞의 문자가 두 번 나타나는 것을 의미합니다(이 경우에는 .임의의 문자).
  • \(...\)괄호는 일치 그룹을 만드는 데 사용됩니다. 나중에 패턴이나 대체 문자열에서 일치하는 하위 문자열을 참조할 수 있습니다.
  • \1첫 번째로 일치하는 하위 문자열을 나타냅니다(이 경우 "01").

답변2

echo "01XX1234" | sed 's/XX/AB/'

또는
echo "01XX1234" | sed 's/\(01\).*\(1234\)/\1AB\2/'

답변3

예약된 공간 사용:

> echo "01XX1234" | sed -n 'h;s/01..1234/01AB1234/g;p;x;p'
01AB1234
01XX1234

sed 명령:

  • h --> 패턴 공간을 저장 공간으로 이동합니다.
  • 피 --> 인쇄
  • x --> 홀드 공간과 패턴 공간 교환

관련 정보