![sed를 사용하여 패턴을 검색하고 해당 줄의 다른 하위 문자열로 바꾸는 방법](https://linux55.com/image/217462/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EA%B2%80%EC%83%89%ED%95%98%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%EC%A4%84%EC%9D%98%20%EB%8B%A4%EB%A5%B8%20%ED%95%98%EC%9C%84%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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
# ^
여기에는 쉼표가 없습니다