我试图用自定义文本替换下面 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