참조 링크:파일의 특정 문자열 뒤에 텍스트를 삽입하는 방법은 무엇입니까? 다음 입력 파일이 있습니다.
Some text
Random
[option]
Some stuff
"[옵션]" 앞에 텍스트 한 줄을 추가하고 싶습니다.
Some text
Random
Hello World
[option]
Some stuff
이 명령은 다음과 같습니다.
sed '/\[option\]/i Hello World' input
작동
하지만 다음 명령은 다음과 같습니다.
perl -pe '/\[option\]/i Hello World' input
작동하지 않습니다.
동등한 perl 명령은 무엇입니까?
고쳐 쓰다:
@terdon과 @Sundeep 덕분에 다음과 같은 부분적인 해결책을 찾았습니다.
perl -lpe 'print "Hello World" if /^\[option\]$/' input
하지만 매번 삽입하는 것이 아니라 "[옵션]"을 처음 접할 때만 텍스트 문자열을 삽입하고 싶습니다.
예를 들어:
Some text
Random
[option]
Some stuff
test1
[option]
test2
다음과 같이 됩니다:
Some text
Random
Hello World
[option]
Some stuff
test1
Hello World
[option]
test2
아니다:
Some text
Random
Hello World
[option]
Some stuff
test1
[option]
test2
내가 원하는대로.
답변1
Perl 접근 방식은 다음과 같습니다.
$ perl -ne 'if(/\[option\]/){print "*inserted text*\n"}; print' input
Some text
Random
*inserted text*
[option]
Some stuff
더 간결한 또 다른 내용은 다음과 같습니다.
$ perl -ne '/\[option\]/?print "*inserted text*\n$_":print' input
Some text
Random
*inserted text*
[option]
Some stuff
이를 위해서는 전체 파일을 메모리로 읽어야 합니다.
$ perl -0777 -pe 's/\[option\]/*inserted text*\n$&/' input
Some text
Random
*inserted text*
[option]
Some stuff
답변2
@terdon과 @Sundeep에게 감사드립니다! 제가 찾고 있는 테이블은 다음과 같습니다.
perl -lpe 'print "Hello World" if /^\[option\]$/' input
고쳐 쓰다:
매번 삽입하는 것이 아니라 "[옵션]"을 처음 만날 때만 텍스트 문자열을 삽입하고 싶습니다.
나는 해결책을 찾았습니다:
perl -lpe 'print "Hello World" if /^\[option\]$/ && ++$i == 1' input
텍스트를 추가하려면 다음 명령을 사용할 수 있습니다.
perl -lpe '$_ .= "\nHello World" if /^\[option\]$/ && ++$i == 1' input
&&는 if의 AND이고 "++" 또는 "--"는 1을 더하거나 빼는 것을 의미합니다. 변수 i(다른 변수일 수 있음)는 기본적으로 0에서 시작하고 증분은 접두사 표기법이므로 변수가 먼저 증분된 다음 첫 번째 비교가 수행된다는 의미입니다. 이 구문은 명령을 내가 상상했던 것보다 매우 유연하고 강력하게 만듭니다. "&&"는 "and"보다 우선순위가 높습니다. 두 번째 조건은 첫 번째 조건이 충족되는 경우에만 평가됩니다. 따라서 이 경우에는 일치하는 경우에만 변수의 값이 증가하고 비교됩니다.