파일의 남은 줄을 다른 파일로 복사하는 방법

파일의 남은 줄을 다른 파일로 복사하는 방법

xyz한 줄에 해당하는 문자열이 있고 그 뒤에 나오는 모든 줄을 새 파일에 복사 file1.txt하고 싶습니다 . 이 목표를 어떻게 달성할 수 있나요?xyzfile1.txtfile2.txt

나는 cat명령을 알고 있습니다. 그런데 출발선을 어떻게 지정하나요?

답변1

GNU sed 사용

모든 줄 복사뒤쪽에 xyz, 노력하다:

sed '0,/xyz/d' file1.txt >file2.txt

1,/xyz/첫 번째 줄에서 시작하여 첫 번째 일치 항목으로 끝나는 줄 범위를 지정합니다 xyz. dsed에게 이 줄을 삭제하라고 지시하세요.

노트:BSD/MacOS에서는 sed가 작동 sed '1,/xyz/d' file1.txt >file2.txt하지만 첫 번째 항목이 xyz두 번째 줄 이상에 있는 경우에만 작동합니다. (모자 팁:선행.)

제안된 또 다른 접근 방식돈 크리스티, 다음에 적용해야 합니다.모두sed:

{ printf %s\\n; cat file1.txt; } | sed '1,/xyz/d' >file2.txt

다음 테스트 파일을 고려해보세요.

$ cat file1.txt
a
b
xyz
c
d

다음 명령을 실행하세요.

$ sed '1,/xyz/d' file1.txt >file2.txt
$ cat file2.txt
c
d

awk를 사용하세요

awk에도 동일한 논리를 사용할 수 있습니다.

awk 'NR==1,/xyz/{next} 1' file1.txt >file2.txt

NR==1,/xyz/{next}awk에게 첫 번째( NR==1)부터 정규식과 일치하는 첫 번째 줄까지 모든 줄을 건너뛰도록 지시합니다 xyz. 1나머지 모든 줄을 인쇄하도록 awk에 지시합니다.

답변2

그리고 ed:

ed -s file.txt <<< $'/xyz/+1,$w file2.txt'

ed이는 유선에서 다음으로 (원격) 명령을 보냅니다.뒤쪽에( )에는 +1파일 ( ) 끝까지의 행이 기록되어 있습니다.xyz$wfile2.txt

답변3

그리고 csplit:

csplit -s file1.txt %xyz%1

답변4

$ sed -n '/xyz/,$p' file.txt > file2.txt

모든 줄이 인쇄되는 것을 -n방지할 수 있습니다 . sedwith는 $파일의 끝을 나타내고 end는 p인쇄 라인을 나타냅니다. 즉 /xyz/$p, 줄이 일치하면 xyz파일 끝까지 인쇄합니다.

관련 정보