여러 줄의 문장을 통해 Sed 대체


11

나는 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.

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


Great sed reference book : Daniel A. Goldman의 sed Tutorial and Reference에 대한 최종 안내서 ISBN : 978-1-939824-01-1 (EPUB 버전) 08148804441822
Joe

답변:


16

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

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

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


3
@Gilles 나는 당신의 좋은 의도를 이해하지만 내 대답을 엉망으로 만들기 전에 테스트 해보십시오. 다른 의견이 있으면 다른 답변을 추가하거나 의견을 남기는 것이 좋습니다.
Radu Rădeanu

Stack Exchange에 오신 것을 환영합니다. 이 사이트는 공동으로 편집되었습니다. 신뢰할 수있는 다른 사용자가 기여를 공동으로 편집한다는 아이디어가 마음에 들지 않으면이 사이트가 적합하지 않을 수 있습니다. 코드가 의도 한 특정 문구보다 더 많이 대체 된 것으로 나타났습니다. 따라서 문구를 편집했습니다.
Gilles 'SO-stop

@Gilles 제발, 당신은 장난하지 않아도됩니다. 또한 "코드" 가 전혀 대체 되지 않았다는 것을 알아야 합니다 . 내가 말했듯이, 나는 당신의 좋은 의도를 이해합니다. 내 예에서 나는 OP가 여러 줄의 문장을 대체하는 방법을 이해한다고 가정합니다 sed. 그리고 이것은 제목 문제입니다. 제목은 약이 아닙니다 perl.
Radu Rădeanu

아니요, 게시 한 코드가 작동합니다. ( Lorem마지막 줄에있는 경우를 제외하고 , 결함은 해당 버전과 공유합니다.)
Gilles 'SO-Stop

이 예는 3 줄 이상의 텍스트가있을 때 작동하지 않습니다 :(
artnikpro

12

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'

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


@ terdon 아, 여러 공백을 허용했지만 잊어 버렸습니다. 고마워요
Gilles 'SO- 악마 그만'

질문은에 관한 것 sed입니다. 또한 태그가 sed아닌으로 태그 되었습니다 perl.
Radu Rădeanu

0

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


7
sed 여러 줄을 읽을 수 있습니다 !
Radu Rădeanu

3
@ RaduRădeanu 기술적으로는 그렇습니다. 그러나 그만한 가치는 거의 없습니다.
Gilles 'SO- 악마 그만'

3
@Gilles 사용 perl이 더 간단 하다고해서 이것이 그다지 sed큰 문제 가되지는 않습니다 .
Radu Rădeanu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.