패턴 뒤에 다른 파일에 파일 삽입 [중복]

패턴 뒤에 다른 파일에 파일 삽입 [중복]

첫 번째 포함된 줄 다음에 a파일의 내용(뒤에 개행 문자)을 파일에 삽입하려면 어떻게 해야 합니까 ?bPATTERN

답변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

관련 정보