Shell-Script
awk 列印撇號/單引號
無法弄清楚如何在使用 awk 時轉義所有內容。
我需要用單引號將每個輸入字元串括起來,例如
input string1 string2 string3 output 'string1' 'string2' 'string3'
一直在與逃避
' " $0
和其他一切作鬥爭,但我無法讓它發揮作用。要麼 $0 直接傳遞給 bash,要麼發生其他事情。
這裡有幾種方法:
- 使用八進制轉義序列。在編碼為字節 39(八進制 047)的基於 ASCII 的系統上
'
,這將是:awk '{print "\047" $0 "\047"}' input 'string1' 'string2' 'string3'
- 將引號作為變數傳遞
$ awk -v q="'" '{print q $0 q}' input 'string1' 'string2' 'string3'
在 awk 程式碼中,只需將撇號放在雙引號內。無論這些字元串是如何構造的(文字、變數、欄位引用、帶括號的表達式……),您都可以通過將它們彼此相鄰(並置)來連接字元串。
{ print "'" $0 "'" }
如果這個 awk 程式碼包含在 shell 腳本中,並且 awk 程式碼是單引號文字,那麼您必須安排將單引號字元傳遞給 awk。使用 single-quote-backslash-single-quote-single-quote
'\''
在單引號 shell 文字中包含單引號字元。awk '{ print "'\''" $0 "'\''" }'
或者,表達 awk 程式碼而不使用單引號字元。您可以使用反斜杠後跟三個八進制數字來表示 awk 中字元串文字中的任何字元。對於基於 ASCII 的系統上的單引號,即
\047
.awk '{ print "\047" $0 "\047" }'