다른 파일의 특정 위치에 있는 텍스트 바꾸기

다른 파일의 특정 위치에 있는 텍스트 바꾸기

텍스트를 교체해야 합니다파일 2.txt도착하다파일 1.txt5위와 8위 사이. 5번째에서 8번째 위치 사이의 문자여야 합니다. 언급된 위치의 새 문자로 바꾸면 되고 나머지 위치의 문자는 이전과 동일해야 합니다.

파일 1.txt:

abcd9876efghijklmno
abcd9676efghijklmno
abcd9886efghijklmno
abcd9976efghijklmno

파일 2.txt:

1234
4321
6543
5678

예상 출력:

abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno

내가 시도한 명령

sed '/substr($0,5,4)/r File2.txt' File1.txt >file_new.txt

답변1

조합을 사용하는 것이 더 쉬울 수도 있습니다.paste+cut

$ paste -d'\0' <(cut -c1-4 File1.txt) File2.txt <(cut -c9- File1.txt)
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
  • -d'\0'결합된 입력이 사이에 문자 없이 입력될 수 있도록
  • <()프로세스 교체
  • cut -c1-4각 줄의 처음 4개 문자를 제공합니다.
  • cut -c9-위치 9에서 시작하는 각 줄의 모든 문자를 제공합니다.


또 다른 접근 방식은 다음을 사용하는 관용적인 두 파일 처리입니다.awk

$ awk 'NR==FNR{a[FNR]=$0; next} {print substr($0,1,4) a[FNR] substr($0,9)}' File2.txt File1.txt
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
  • NR==FNR{a[FNR]=$0; next}행 번호로 키가 지정된 File2.txt배열에 모든 행을 저장합니다.a
  • print substr($0,1,4) a[FNR] substr($0,9)필요한 문자를 추출하고 중간에 substr줄을 삽입하는데 사용됩니다.File2.txt

답변2

조금 이상해 보일 수도 있지만 다음과 같습니다.

dd if=file1 bs=1 count=4 > file3
dd if=file2 bs=1 count=4 >> file3
dd if=file1 bs=1 skip=8 >> file3  

file2에 줄 바꿈을 복사하는 것에 대해 언급하지 않았으며 전혀 필요하지 않은 것 같습니다.

관련 정보