![awk 和 sed 在每個相關行的行尾追加](https://rvso.com/image/1592566/awk%20%E5%92%8C%20sed%20%E5%9C%A8%E6%AF%8F%E5%80%8B%E7%9B%B8%E9%97%9C%E8%A1%8C%E7%9A%84%E8%A1%8C%E5%B0%BE%E8%BF%BD%E5%8A%A0.png)
我想做一些行操作,但陷入了逐行處理。我的文件如下所示:
10.10.10.10 ABtest
10.10.10.11 ABprod
我想根據行尾的字串在每一行附加一個字串。
我的方法是使用 awk 測試ABtest
行尾的字串,然後使用 sed 進行ABtest
轉換test
。之後,我想將輸出附加到每個相關行。
我想輸出如下:
10.10.10.10 ABtest test
10.10.10.11 ABprod prod
答案1
不需要兩者都使用,sed
而且awk
,您可以使用一種工具。實現您目標的程式碼awk
可能是
awk '
/AB/ {
printf $0
gsub("^AB", "", $2)
printf " %s\n", $2
}
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT
/<expression>/
搜尋正規表示式,該{<code>}
部分告訴 awk 如何處理該記錄。在這種特殊情況下,函數gsub
會取代第二列中“AB”的所有外觀 - 如果您只想替換第一個外觀,請使用sub()
但關於正則表達式,我想您可以在此處使用一個或另一個具有相同的結果- 以及結果隨後打印。
您的問題尚不清楚要編輯的行之間是否有任何行要不加更改地列印。如果是這種情況,您需要在配對和編輯後跳到下一筆記錄,如下所示:
awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT