접두사와 접미사 사이의 내용을 제거하는 방법

접두사와 접미사 사이의 내용을 제거하는 방법

접두사와 접미사(여러 줄) 사이의 내용만 제거하고 싶습니다. 내 접두사와 접미사는 제거되어서는 안 됩니다.

나는 이것을 시도했지만 내 접두사와 접미사가 제거되었습니다.

sed -i "/prefix =/,/suffix =/d" myfile.txt

콘텐츠:

prefix = Content that i want to delete.
That includes multiple lines as
well as ASCII characters.
suffix = ,

산출:

prefix = 
suffix = ,

답변1

한 가지 가능한 방법은 awk를 사용하여 =필드 구분 기호로 사용하는 것입니다.

$ awk -F'=' 'BEGIN{OFS="=";};/^prefix/{$2=""; print; noprint=1};/^suffix/{noprint=0;print};noprint{next;};' input.txt
prefix =
suffix = ,

접미사 앞뒤에 다른 콘텐츠를 얻으려면 약간 수정하여 동일한 방법을 사용할 수 있습니다.

$ awk -F'=' '/^prefix/{$2=""; printf "%s%s\n",$1,FS; noprint=1};/^suffix/||!noprint{noprint=0;print};noprint{next;};' input.txt
things beforeprefix
prefix =
suffix = ,
things after suffix

물론 다음과 같이 단축할 수 있습니다.

$ awk 'BEGIN{FS=OFS="=";};/^prefix/{p=1;$2="";print};/^suffix/{p=0};!p' input.txt
things beforeprefix
prefix =
suffix = ,
things after suffix

답변2

다음 명령을 사용해 보았더니 정상적으로 작동했습니다.

sed -n '/prefix/,/suffix/p' file.txt| awk '/prefix/||/suffix/{print $0}'| sed '/prefix = /s/=.*/=/g' >file_tmp.txt && mv file_tmp.txt file.txt

산출

prefix =
suffix = ,

답변3

파일의 줄을 편집하려면 다음으로 명령을 보내면 됩니다 ed.

printf '%s\n' '/^prefix =/+1,/^suffix =/-1d' '1,$s/^prefix = .*/prefix =/' 'wq' |ed -s myfile.txt

이는 개행으로 구분된 세 개의 명령을 보냅니다 ( 옵션을 사용하여 myfile.txt를 ed시작하고 자동으로 처리하도록 지시합니다 ).-s

  • /^prefix =/+1,/^suffix =/-1d-- 범위의 줄 삭제: " prefix =줄의 시작과 일치하는 줄 뒤의 줄" ~ " suffix =줄의 시작과 일치하는 줄 앞의 줄"
  • 1,$s/^prefix = .*/prefix =/-- 검색 및 바꾸기: 파일의 각 줄에서 prefix =줄의 시작 부분에 있는 패턴을 텍스트로 바꾸거나 아무것도 넣지 않습니다.prefix =
  • wq-- w파일을 다시 디스크에 쓰고 q종료합니다 .ed

이는 파일과 원하는 번역에 대해 몇 가지 가정을 합니다.

  • prefixthe와 접미사 사이에는 최소한 한 줄이 있어야 합니다.
  • prefix =모든 후행 텍스트를 제거 하고 싶습니다
  • "섹션"이 하나만 있으므로 prefix업데이트 suffix해야 합니다.

답변4

귀하의 요구 사항에 따라 이것을 시도해 볼 수 있습니다:

$ sed -ne '
   /^\(prefix =\).*/,/^\(suffix =.*\)/!p
   s//\1/p
' myfile.txt

관련 정보