제가 직접 대본을 쓰고 있어요. 하지만 난 네 도움이 필요해
다음과 같은 파일(test.md)이 있습니다.
sometext
sometext
<!--SEPERATOR1-->
text to be deleted
foobar to be deleted
foooooooooooobar
foobaaaaaaaaaaar
<!--SEPERATOR1-->
sometext
sometext
이 텍스트 파일(test.md)에서 "SEPERATOR1"로 구분된 섹션의 텍스트를 정리하고 새 텍스트를 추가하고 싶습니다. 어떻게 해야 하나요? 감사합니다.
예상 출력:
sometext
sometext
<!--SEPERATOR1-->
new text
butterfly
foo bar etc.
<!--SEPERATOR1-->
sometext
sometext
답변1
sed
다음을 사용하여 범위를 지정하여 텍스트를 변경할 수 있습니다 ./startpattern/,/endpattern/
c
sed '/<!--SEPERATOR1-->/,/<!--SEPERATOR1-->/c<!--SEPERATOR1-->\nnew text\nbutterfly\nfoo bar etc.\n<!--SEPERATOR1-->' filename.txt
\n
결과의 줄바꿈 에 사용됩니다 .
> newfilename.txt
끝에 추가하여 출력을 파일로 리디렉션하거나 플래그를 추가하여 파일 -i
을 제자리에서 변경할 수 있습니다(비록정확한 구문sed 버전).
하지만 "전통적인" 철자법을 사용하는 다른 사람이 나중에 코드를 유지 관리해야 하는 경우(예: 이전 버전의 코드) SEPERATOR
로 변경할 것을 제안할 수도 있습니다 .SEPARATOR
답변2
사용행복하다(이전 Perl_6)
~$ raku -e 'for lines.join("\n") {.subst(:global, / "<!--SEPARATOR1-->" <(.*?)> "<!--SEPARATOR1-->" /, "\nnew text\nbutterfly\nfoo bar etc.\n" ).put};' file.txt
#OR
~$ raku -e 'for lines.join("\n") {.split(/ <?after "<\!--SEPARATOR1-->"> .*? <?before "<\!--SEPARATOR1-->"> /).join("\nnew text\nbutterfly\nfoo bar etc.\n" ).put};' file.txt
입력 예:
sometext
sometext
<!--SEPARATOR1-->
text to be deleted
foobar to be deleted
foooooooooooobar
foobaaaaaaaaaaar
<!--SEPARATOR1-->
sometext
sometext
예제 출력:
sometext
sometext
<!--SEPARATOR1-->
new text
butterfly
foo bar etc.
<!--SEPARATOR1-->
sometext
sometext
위의 코드는 Perl 프로그래밍 언어 계열에 속하는 Raku를 사용하는 상당히 전통적인 접근 방식입니다. 간단히 말해서(첫 번째 예) lines
읽고, 줄 바꿈 join
으로 편집하고 \n
, 사이에 0개 이상의 문자가 탐욕스럽지 않게 일치하는 SEPARATOR
패턴(쌍)을 검색합니다 . ... 캡처 태그가 발견 .*?
되면 일치 항목이 외부에 배치되고 일치 항목이 원하는 줄로 대체됩니다.<(
)>
<(.*?)>
두 번째 예에서는 split
/ join
메소드를 사용하지만 그 외에는 매우 유사합니다. 각 방법은 동일한 출력을 제공합니다.