SED는 moi(역참조 문제)를 신속하게 해결하려고 합니까?

SED는 moi(역참조 문제)를 신속하게 해결하려고 합니까?

꺼내려고 하는데제삼이 줄의 하위 표현식:

#EXTRA_GROUPS="dialout cdrom floppy audio video plugdev users"

( adduser.conf궁금하신 분들을 위해 예, 해당 파일이 있습니다):

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)/\3/' adduser.conf

이것이 작동하고 생산하는 동안

#dialout cdrom floppy audio video plugdev users

#(표현에서 기호는 생략하였으니 무시해주세요), 이

sed 's/\(EXTRA_GROUPS=\)\("\)\(.*\)\("\)//3' adduser.conf

그렇지 않고 파일을 그대로 둡니다.

마지막 예제에서는 역참조 번호 3을 제거해야 한다는 것을 알고 있지만 /sd/3("세 번째 하위 표현식을 sd"로 바꾸기)를 사용하여 명령을 수정하면 실제로 아무 작업도 수행되지 않습니다.

-n //p동일한 결과를 얻기 위해 options-all을 사용하여 명령을 실행해 보았습니다 .

sed저는 Debian Jessie 컴퓨터에서 GNU 버전 4.2.2를 사용하고 있습니다.

핵심 유틸리티 "교육"의 일부 핵심 부분을 놓치고 있습니까? 아니면 한동안 태양에서 벗어나 있었습니까?

답변1

이것/n 배너대체 명령은 아무 s관련이 sed없습니다역참조 \n.

  • 예를 들어, s/regex/string/3현재 줄에서 세 번째 항목을 로 바꿀 수 있습니다.regexstring
  • 를 사용하면 s/regex/\3/첫 번째 항목을 regex세 번째 캡처링 그룹으로 바꿀 수 있습니다.
  • 를 사용하면 s/regex/\3/3세 번째 일치 항목을 regex세 번째 캡처링 그룹으로 바꿀 수 있습니다.

이 경우에는 아마도 다음과 같은 더 간단한 것을 사용하겠습니다.

sed 's/^.*EXTRA_GROUPS="\([^"]*\)".*$/\1/'

문자열을 사용하지 않는 경우 문자열의 비트를 캡처하는 것은 쓸모가 없습니다.

관련 정보