여러 줄의 문장을 통해 Sed 대체 줄에 있으면 전체 문장을 수정하기 위해

나는 sed를 처음 사용하지만 s/..../..../한 줄에 있으면 전체 문장을 수정하기 위해 sed (대체)를 실험 했지만 다음과 같이 두 줄로 분리 된 문장을 수정하는 방법에 대한 대안 솔루션을 알지 못합니다.

이:

Lorem Ipsum is simply dummy text of the printing and typesetting industry.

실제로 다음과 같이 작성됩니다.

Lorem Ipsum is simply dummy text of the
printing and typesetting industry.

한 문장이 아닌 두 줄로되어 있어도 문장 전체를 대체하기 위해 이것을 감지하거나 코드를 작성하는 방법은 무엇입니까?



답변

다음 명령은 두 상황 모두에서 작동합니다.

sed '/Lorem.*/ {N; s/Lorem.*industry\./string to replace/g}' filename

추가 설명 : sed를 사용하여 여러 줄 문자열을 바꾸려면 어떻게해야합니까?


답변

sed는 여러 줄의 패턴을 일치시킬 수 있지만 (명령을 사용 N하거나 H일치하기 전에 연속적인 줄을 추가하기 위해) 편안 영역 밖에 있습니다. 당신이 고통을 좋아하는 경우에만 시도하십시오.

펄은 이런 종류의 일을 잘 할 수 있습니다. -p스위치 를 사용하여 한 번에 한 레코드 씩 표준 입력을 처리하고 수정 된 레코드를 인쇄하고 (레이스 됨) -000단락 모드 (레코드가 공백 행으로 구분됨 ) 를 켭니다. 정규식 \s에서 줄 바꿈을 포함한 모든 공백 문자와 일치합니다.

perl -p -000 -e 's/Lorem\s+Ipsum\s+is\s+simply\s+dummy\s+text\s+of\s+the\s+printing\s+and\s+typesetting\s+industry\./Replacement text/g'

원본에 줄 바꿈이 들어있을 때 대체 텍스트에 줄 바꿈을 넣으려면 더 복잡합니다. 이를 수행하는 방법은 개행 위치에 대한 요구 사항에 따라 다릅니다.


답변

sed는 여러 줄에서 쉽게 읽을 수 없습니다. perl -i -0pe 's/.../.../...'대신 사용하십시오 .


답변