2012-08-29 4 views
2

이것은 간단한 질문입니다. sed/awk를 사용하여이 작업을 수행 할 수 있는지 확실하지 않습니다 어떻게이 세 줄의 sed 검색을 수행하고 줄로 바꿀 수 있습니까? 결정된 문자열로? 내가 나오지 "s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/g"과 노력3 줄을 다른 줄로 바꿉니다 SED 구문

<test> 

<Blarg> 
<Bllarg> 
<Blllarg> 

교체 그러나 단지이 라인을 찾을 수가 없습니다. 내 줄 바꿈 문자 (?)가있는 것 같아 \n. 내가 놓친 게 있니?

답변

4

로 대체, 당신의 패턴과 일치하지 않습니다. 이 시도 :

sed '1N;$!N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/;P;D' filename 
+0

작동하지 않습니다는 =/ – ghaschel

+2

이 예는, 사용하는 GNU 죄송 –

+0

을 나오지도 않는 일을하지 않았다, 그것은 참으로 작동합니다. 을 사용하는 대신 <\/Blarg>을 사용하여 작업하지 마십시오. (infile도 변경되었습니다.) – ghaschel

2

이 당신을 위해 작동 될 수 있습니다

sed '/<Blarg>/ {N;N;s/<Blarg>\n<Bllarg>\n<Blllarg>/<test>/}' <filename> 

그것은 작동은 다음과 같습니다 : <Blarg>

  • 그런 다음 사용하여 현재 패턴 공간에 다음 두 줄을 추가 발견 될 때까지

    • 파일을 검색 N;N;
    • 현재 패턴 공간이 일치하는지 확인하십시오. <Blarg>\n<Bllarg>\n<Blllarg>
    • 일반적으로 나오지도 한 번에 하나의 라인을 처리하므로
    • 그렇다면, <test>
  • +1

    @ghaschel는 생각이 여러 번 작동 – Sicco

    +0

    그것은 마법처럼 작동합니다. 테스트 파일에서,하지만 내가 필요한 파일을 시도 할 때, 그냥 작동하지 않습니다 ... – ghaschel

    +0

    당신의 질문을 편집하고 실제 파일의 내용을 추가 할 수 있을까요? – Sicco

    관련 문제