2013-05-10 245 views

回答

5

絕對不能在單引號分隔的腳本中使用單引號,因爲引用絕對錶示該腳本[segment]的結尾。你的選項有:

  1. 把腳本文件中的「富」如{print "'"$0}和執行:awk -f foo file,或
  2. 使用轉義序列\047無處不在,你想打印報價:awk '{print "\047"$0}' file,或
  3. 保存在一個變量的引用:awk -v q=\' '{print q$0}' file,或
  4. 雙,而不是單引號分隔awk腳本和逃避任何東西的外殼可能會在意:AWK「{打印\」'\‘\ $ 0}’文件
  5. 退出awk a第二回殼剛剛拿到報價:當最終awk '{print "'\''"$0}' file

上面的最終名單產品awk腳本('{print "''"$0}')實際上2個獨立片段在中間(\')有點殼等等結果是連接那些通過shell傳遞到awk命令執行,你得到你想要的。

FWIW如果您的腳本超過幾行,「2」或「3」,我會使用「1」,否則以「3」作爲我的個人偏好,但YMMV。我不會做4或5.

1

做這將是正確的做法:

$ awk -v c="'" '{print c$0}' file 
1

可能是這樣?

awk 'sub(/^/,"\x27")' 

如果你喜歡print

awk '{print "\x27"$0}' 
2

一種解決方案是隻使用ASCII碼爲'

$ awk '{print "\047"$0}' file 
+1

+1爲巧妙的方法 – 2013-05-10 18:51:18

5

或者使用sed

sed -e "s/^/\'/" file 
+0

+1因爲這是我們應該如何真正做到這一點。 – 2013-05-10 18:57:24

4

爲了有一個'在bash一個' -delimited字符串中是有點棘手:

你必須終止' -string,則必須把'的報價方式,然後重新啓動' -string :

echo 'ab'\''cd' 

將打印

ab'cd 

,並且將這一知識用於您的命令,你需要

awk '{print "'\''"$0}' file 

相同的原則:你想

{print "'"$0} 

,並有在'分裂。所以,你得到2個部分:{print ""$0}具有被封閉在'和 「加盟」 與\'

'{print "'\''"$0}' 
0

試試這個:

awk '$0="'\''"$0'<<XXX 
one 
two 

three 
XXX 

輸出:

'one 
'two 
' 
'three 

由於它不是由awk處理的,所以對於呼叫外殼應該轉義字符'。所以首先它必須關閉(第二個'),然後在shell中跳過(\'),然後再次打開(第4個')。

相關問題