2016-02-01 30 views
2

我想用'LK'替換每行最後一個字中的'UN'。如何用另一個字符串替換字符串只在每行的最後一個字上

輸入文件:

Y'UN 310R 07MAR DAUNEN UN2  
Y'UN 720R 07MAR DENSUN HK2  
Y'UN 721R 14MAR UNDDEN HK2  
Y'UN1692R 14MAR DEUNAY UN2 

輸出需要:

Y'UN 310R 07MAR DAUNEN LK2  
Y'UN 720R 07MAR DENSUN HK2  
Y'UN 721R 14MAR UNDDEN HK2  
Y'UN1692R 14MAR DEUNAY LK2 
+0

那些是空行出現在你的輸入,還是你只是想你的每行數據分開?你有嘗試過什麼嗎?這是非常簡單的東西。 –

+0

最後一個聯合國總會有號碼嗎? –

+0

數據之間沒有空行。是的,聯合國總是在命令中有一個號碼 –

回答

1

這裏的關鍵是使用錨 '行尾' - $

sed -e 's/UN\([A-Z0-9]*\)$/LK\1/' 
+0

\ 1,這是什麼意思。 –

+1

@DheebanChakkaravarthy它被第一對'()',基本的正則表達式東西匹配的內容所取代 – Vasfed

2

隨着awk

awk '{sub(/UN/, "LK", $NF)}1' File 

在每行的最後一個字段($NF)中,用字符串LK("LK")替換模式UN(/UN/)。打印未受影響的行(1)。

輸出:

Y'UN 310R 07MAR DAUNEN LK2 

Y'UN 720R 07MAR DENSUN HK2 

Y'UN 721R 14MAR UNDDEN HK2 

Y'UN1692R 14MAR DEUNAY LK2 
+1

您選擇的語法意味着sub的輸出被解釋爲一個字符串,然後與一個字符串'「1」 ,所以它以你想要的方式做到了,但是方式相當怪異。我建議'awk'{sub(/ UN /,「LK」,$ NF)} 1''或者甚至直接寫'print'語句。 –

+0

@TomFenech是100%正確的。實際上我們在大約15年前就有關於comp.lang.awk的討論,並且都同意這裏顯示的語法不應該被使用,即使它比動作('sub()')更清晰的方式稍微簡短一些。在條件部分的動作塊和條件('1')中。 –

+0

哎呀...感謝各位指出...實際上這不是我真正想要的,因爲輸出正確而錯過了括號。 –

相關問題