두 개의 특정 패턴 사이에 텍스트를 덮어쓰는 방법은 무엇입니까?

두 개의 특정 패턴 사이에 텍스트를 덮어쓰는 방법은 무엇입니까?

다음과 같은 행이 여러 개 있습니다.

##1##
text
##z##
##2##
text
##z##
...etc

기본적으로 ##digit## 줄과 ##z##의 첫 번째 항목 사이에 텍스트를 가져오는 방법을 이미 알고 있지만 그 사이에 있는 내용(실제 텍스트)을 덮어쓰는 방법은 잘 모르겠습니다.

위 예제/파일의 모든 부분을 바꾸려는 것이 아니라 text내가 지정한 시작 지점(예: ##99##)과 끝 지점(##z##) 사이의 부분만 바꾸려고 합니다.

text해당 부분을 덮어쓰고 싶은 텍스트(예: sed 's/oldtext/newtext/g')로 바꿀 수 없거나 바꾸고 싶지 않습니다. 그 이유는 주로 다음과 같습니다.

  • 텍스트 섹션은 해당 파일의 다른 중간 섹션의 일부일 수 있으며 특히 텍스트를 변경할 수 있지만 두 개의 특정 라인/패턴 사이에 있는 내용은 그렇지 않습니다.

Unix/네이티브 Linux 도구를 사용하여 이 작업을 어떻게 수행합니까? (dd, sed 등)

답변1

file.txt라는 파일과 그 내용이 주어지면

##1##
text
##z##
##2##
text
asdf
more text
##z##
...etc

당신이 원하는 것이 무엇인지 명확하지 않습니다. 나는 그것이 다음과 같다고 생각합니다.

주문하다

cat file.txt | sed -n '/##2##/!{p;d};p;:cycle n;/##z##/!{H;bcycle};{x;s/.*/my awesome replacement/p;x;p}'

출력을 생성합니다.

##1##
text
##z##
##2##
my awesome replacement
##z##
...etc

너가 원하는게 그거야?

관련 정보