접두사와 접미사(여러 줄) 사이의 내용만 제거하고 싶습니다. 내 접두사와 접미사는 제거되어서는 안 됩니다.
나는 이것을 시도했지만 내 접두사와 접미사가 제거되었습니다.
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
이는 파일과 원하는 번역에 대해 몇 가지 가정을 합니다.
prefix
the와 접미사 사이에는 최소한 한 줄이 있어야 합니다.prefix =
모든 후행 텍스트를 제거 하고 싶습니다- "섹션"이 하나만 있으므로
prefix
업데이트suffix
해야 합니다.
답변4
귀하의 요구 사항에 따라 이것을 시도해 볼 수 있습니다:
$ sed -ne '
/^\(prefix =\).*/,/^\(suffix =.*\)/!p
s//\1/p
' myfile.txt