Bash

用自定義字元串替換txt文件中一列的內容

  • September 29, 2022

我正在嘗試用自定義文本替換下面我的 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查看是否可以用自定義文本替換第 3 行,但它會替換其中的現有文本。

如果另一個文件每行有一個字元串,如下所示:

$ 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

引用自:https://unix.stackexchange.com/questions/719115