2013-09-22 54 views
0

我有包含像JOY_DOL_XXX字符串在很多地方一些文件。我想用另一個帶雙引號的字符串替換爲"JOY.DOL.XXX",但這裏的XXX可以是任何內容,例如MAN,CAT,DOG所以在這種情況下,我想寫一個腳本,相應地替換它,而不明確指定它。在殼牌如何從一種形式的字符串替換爲另一種形式

例如:

JOY_DOL_MAN ==> "JOY.DOL.MAN" 
    JOY_DOL_CAT ==> "JOY.DOL.CAT" 

能否請你幫我,我怎能做到這一點。

+0

是否添加**' 「'**太之前和之後的字符串** –

+0

是XXX總是3個字符如果'JOY_DOL_FOOBAR'出現在你的輸入,將所需的輸出是什麼? - ?'」 ?JOY.DOL.FOO 「BAR'或'」 JOY.DOL.FOOBAR「'或'JOY_DOL_FOOBAR'或別的東西 –

回答

0

This awk may work。

awk '{gsub(/_/,".");print "\""$0"\""}' file 

awk -F_ '{$1=$1;print "\""$0"\""}' OFS=. file 

支持更復雜的請求。

echo ABC JOY_DOL_CAT XYZ | awk '{for (i=1;i<=NF;i++) {if (gsub(/_/,".",$i)) printf "\"%s\" ",$i; else printf "%s ",$i}print ""}' 
ABC "JOY.DOL.CAT" XYZ 
+0

我在這裏有另一個疑問,$ echo JOY_DOL_XXXX | sed的| JOY_DOL _ \(... \)|「JOY.DOL。\ 1」| g' 使我輸出爲「JOY.DOL.XXX」X.但我期待「JOY.DO.XXXX」這裏XXX可能是3個字符或更多。請爲此建議解決方案 – user2803710

+0

我發現上面給出的「awk」解決方案對於這種情況正常工作。謝謝.. – user2803710

+0

我注意到現在還有一個問題。 #echo ABC JOY_DOL_CAT XYZ | AWK '{GSUB(/ _ /, 「」);打印 「\」 「$ 0」 \ 「」}' OUTPUT: 「ABC JOY.DOL.CAT XYZ」,但我期待ABC「JOY.DOL.CAT 「XYZ – user2803710

2

桑達似乎簡單:

sed 's|JOY_DOL_\(...\)|"JOY.DOL.\1"|g' file 

輸入:

JOY_DOL_MAN 
JOY_DOL_CAT 

輸出:

"JOY.DOL.MAN" 
"JOY.DOL.CAT" 
  • \(...\)三個字符。在替換中代表\1
  • g將允許多個匹配被替換爲每個輸入模式。
+0

哦..that的偉大我只是測試,如下 – user2803710

+0

$回聲JOY_DOL_XXX |。sed中的| JOY_DOL _ \( ... \)|「JOY.DOL \ 1。」 | G」 – user2803710

+1

@ user2803710不客氣,我希望你可以通過點擊其左邊感謝複選標記接受的答案太 – konsolebox