텍스트 파일의 내용을 복사하여 특정 줄의 다른 부분에 붙여 넣을 수 있습니까?


13

텍스트 파일의 내용을 복사하여 다른 텍스트 파일에 붙여 넣어야합니다. 첫 번째 텍스트 파일에는 10 줄의 데이터가 있으며 5 번째 줄부터 시작하여 두 번째 텍스트 파일로 복사해야합니다. 따라서 두 번째 텍스트 파일에서 이러한 데이터는 5 행에서 14 행으로 작성해야합니다. 어떻게해야합니까? 미리 감사드립니다. 리눅스에 관한 신인으로 생각하십시오.

답변:


10

head그리고 tail해결책

소스 파일이 호출 ~/a되고 삽입 될 파일이 호출되었다고 가정하십시오 ~/b. 병합 된 파일을 ~/c다음에 넣습니다 .

head -n 5 ~/a > ~/c
cat ~/b >> ~/c
tail --lines=+6 ~/a >> ~/c
  • 경로 ~//home/user디렉토리 이름의 단축입니다
  • head는 파일의 처음 다섯 줄 a을 새로 작성된 파일로 복사 합니다.c
  • cat은 파일 내용을 나열하고 파일 b에 추가합니다.c
  • tail a은 6 행에서 시작하여 파일 끝까지 파일을 추가합니다.c

확인 후 병합 된 파일 이름 바꾸기

해당 파일을 확인한 후 c파일에서 올바르게 병합 a하고 b우리는 이름을 바꿀 수 있습니다 ca사용 :

mv ~/c ~/a
  • mv파일 c을 파일 로 옮깁니다 a. 데이터는 물리적으로 이동되지 않습니다. 파일 이름이 변경되어 시간이 절약됩니다.

답변 주셔서 감사합니다. 잘 작동했습니다. 그러나 세 번째 텍스트 파일을 사용하지 않고 이것을 수행하는 다른 방법이 있습니까?
G. Paschalis

완료되면 세 번째 파일의 이름을 소스 파일로 바꿀 수 있습니다. 파일을 먼저 볼 수있는 것이 가장 좋다고 생각했습니다. 이제 답변에 추가 단계를 추가하겠습니다.
WinEunuuchs2Unix

또는 ...(head -n 5 a.txt ; cat b.txt ; tail -n +6 a.txt) > c.txt

1
@JJoao 그것은 멋진 한 줄 요약입니다. 그러나 복사 및 터미널에 붙여 넣기를 위해 나는 하나의 라이너를 좋아합니다!
WinEunuuchs2Unix

16

가장 쉬운 도구는 다음과 같습니다 sed. 삽입하려면 b.txta.txt5 선 후, 당신은 쓸 수 있습니다 :

sed '5r b.txt' a.txt

sed인수 ( a.txt) 로 지정된 파일을 한 줄씩 읽습니다 . 모든 행은 명령에 의해 변경되지 않는 한 입력에 나타난 그대로 출력에 재현됩니다.

5다음 명령이 실행되어야하는 어드레스 (행 번호)이다. 우리가 사용하는 명령 r은 파일 이름을 인수 (여기 b.txt)로 가져 와서 완전히 읽고 현재 줄 다음에 출력에 삽입합니다.

sed명령 줄은 파일에 쓰지 않고 터미널로만 출력을 인쇄합니다. Bash의 출력 리디렉션을 사용하여 파일을 입력 파일이 아닌 새 파일로 리디렉션 할 수 있습니다.

sed '5r b.txt' a.txt > c.txt

또는 직접 외부 입력 파일을 수정할 수 있습니다 a.txt사용하여 sed의를 -i스위치 ( "제자리"에 대한). 로 작성 -i.bak하면 접미사가있는 원본 입력 파일의 백업 사본이 .bak먼저 작성됩니다.

sed -i '5r b.txt' a.txt

예를 들면 :

$ cat a.txt 
January
February
March
April
May
October
November
December

$ cat b.txt 
June
July
August
September

$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December

0

(@ByteCommander의 우아한 예제 재사용 :)

awk '1; NR==5 {system("cat b.txt")}' a.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.