sed를 사용하여 패턴을 검색하고 해당 줄의 다른 하위 문자열로 바꾸는 방법

sed를 사용하여 패턴을 검색하고 해당 줄의 다른 하위 문자열로 바꾸는 방법

NO_ID가 포함된 데이터 파일의 모든 행을 찾은 다음 "확인됨" 문자열을 "확인 보류 중"으로 바꿔야 합니다.

나는 이것을 시도했습니다 :

sed '/NO_ID/, s/confirmed/to be confirmed/' stats.txt

이것은 작동하지 않는 것 같습니다.

답변1

쉼표를 제거하세요. 초기 정규식은 s후속 명령의 "주소" 역할을 합니다(여기에 표시된 주소와 명령 사이의 공백은 선택 사항입니다).

sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt

confirmed명령의 정규식 과 일치하는 단어로 단어를 바꾸면 더 단축될 수 있습니다.s

sed '/NO_ID/ s/confirmed/to be &/' stats.txt

to be confirmed포함된 행이 수정되지 않았 는지 확인해야 하는 경우 :

sed '/NO_ID/ { /to be confirmed/!s/confirmed/to be &/; }' stats.txt

또는,

sed -e '/to be confirmed/b' -e '/NO_ID/ s/confirmed/to be &/' stats.txt

여기서 첫 번째 명령은 먼저 포함된 행을 감지 NO_ID하고 해당 행에 to be confirmed. 두 번째 명령은 포함된 줄을 감지하고 건너뜁니다 to be confirmed( b명령어는 스크립트 끝으로 이동하여 추가 수정 없이 해당 줄이 인쇄되도록 합니다). 포함되지 않은 줄은 to be confirmed원래 명령과 동일하게 수정됩니다.

답변2

이와 같이:

sed '/NO_ID/ s/confirmed/to be confirmed/' stats.txt
#          ^

여기에는 쉼표가 없습니다

관련 정보