아래 txt 파일의 세 번째 열 내용을 사용자 정의 텍스트로 바꾸려고 합니다. 즉, GCM
아래 세 번째 열의 내용 대신입니다. Example1
, Example2
, ... , 와 같은 사용자 정의 텍스트를 원합니다 ExampleN
. 이러한 대체 문자열은 다른 텍스트 파일에서 제공됩니다.
odu-encryption-2/1/5/odu4-1 enabled GCM ^M^M
odu-encryption-2/1/6/odu4-1 enabled GCM ^M^M
odu-encryption-2/1/7/odu4-1 enabled GCM ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled GCM ^M^M
파일은 공백으로 구분됩니다. 마지막 열은 ^M^M
라우터의 표준 출력입니다.
예상 출력 -
odu-encryption-2/1/5/odu4-1 enabled John1 ^M^M
odu-encryption-2/1/6/odu4-1 enabled Mike2 ^M^M
odu-encryption-2/1/7/odu4-1 enabled Tom33 ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled WolfN ^M^M
Bash에서 이 작업을 수행하는 방법을 아는 사람이 있나요? sed '3s/$/ Ccustom text/' testing.txt
세 번째 줄을 사용자 정의 텍스트로 바꿀 수 있는지 알아보기 위해 을 사용해 보았지만 그 안의 기존 텍스트가 바뀌었습니다.
답변1
다른 파일에 다음과 같이 한 줄에 하나의 문자열이 있는 경우:
$ cat file2
John1
Mike2
Tom33
WolfN
찾은 순서대로 추가하려면 다음과 같이 하세요.
$ awk 'NR == FNR{a[NR]=$1;next}; {$(NF-1)=a[FNR]; }1' file2 file1
odu-encryption-2/1/5/odu4-1 enabled John1 ^M^M
odu-encryption-2/1/6/odu4-1 enabled Mike2 ^M^M
odu-encryption-2/1/7/odu4-1 enabled Tom33 ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled WolfN ^M^M
그러나 이것은 연속된 공백을 축소합니다. 이것이 문제라면 다음과 같이 할 수 있습니다.
$ cat file1 | perl -lape 'BEGIN{open($fh,"file2"); while(<$fh>){chomp; $a[$.]=$_}} s/$F[2]/$a[$.]/ '
odu-encryption-2/1/5/odu4-1 enabled John1 ^M^M
odu-encryption-2/1/6/odu4-1 enabled Mike2 ^M^M
odu-encryption-2/1/7/odu4-1 enabled Tom33 ^M^M
odu-encryption-2/3/1/odu4-1/odu2e-1 enabled WolfN ^M^M