用自定义字符串替换txt文件中的一列内容

用自定义字符串替换txt文件中的一列内容

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

相关内容