첫 번째 포함된 줄 다음에 a
파일의 내용(뒤에 개행 문자)을 파일에 삽입하려면 어떻게 해야 합니까 ?b
PATTERN
답변1
sed '/pattern/{r file_b
a\
:f
n; b f
}' file_a
file_b
개행 문자로 종료되었고 출력에 빈 줄을 원하지 않는 경우 a\
스크립트에서 해당 줄을 생략하십시오.
마지막 줄에서 :f
레이블이 정의되고 n
개행 문자가 읽혀지고( -n
옵션이 지정되지 않았기 때문에 자동으로 인쇄됨 sed
) b f
해당 f
레이블로 분기되어 루프가 생성됩니다. 이 모든 작업은 file_b
다음에 추가하기 위해 수행됩니다.첫 번째라인 매칭 모드. file_b
나중에 추가 하고 싶다면각라인 일치가 pattern
훨씬 간단합니다.
sed '/pattern/r file_b' file_a
예:
$ cat file_a
first
second
third
fourth
first
second
third
fourth
$ cat file_b
b1
b2
b3
$ sed '/second/{r file_b
:f n; b f }' file_a
first
second
b1
b2
b3
third
fourth
first
second
third
fourth
$ printf "x\ny\nz" >file_c
$ sed '/second/{r file_c
a
:f n; b f }' file_a
first
second
x
y
z
third
fourth
first
second
third
fourth
$ sed '/second/r file_b' file_a
first
second
b1
b2
b3
third
fourth
first
second
b1
b2
b3
third
fourth
또 다른 해결책은 다음을 사용하는 것입니다 ed(1)
(POSIX에서 의무화하고 약 45년 동안 모든 UNIX 시스템에 존재했음에도 불구하고 놀랍게도 최신 Linux 배포판에서는 기본적으로 사용할 수 없음).
echo '/pattern/r file_b
w' | ed file_a
그러면 제자리에서 편집되고 개행 문자가 추가됩니다( file_a
끝에 ;가 있는 경우). file_b
출력을 다른 파일에 기록하려면 w
로 변경하십시오 w output_file
.
답변2
어때요?
sed '/PATTERN/r a' b