Bash
用自定義字元串替換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
查看是否可以用自定義文本替換第 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