Shell-Script

awk 列印撇號/單引號

  • April 14, 2022

無法弄清楚如何在使用 awk 時轉義所有內容。

我需要用單引號將每個輸入字元串括起來,例如

input
string1
string2
string3

output
'string1'
'string2'
'string3'

一直在與逃避' " $0和其他一切作鬥爭,但我無法讓它發揮作用。要麼 $0 直接傳遞給 bash,要麼發生其他事情。

這裡有幾種方法:

  1. 使用八進制轉義序列。在編碼為字節 39(八進制 047)的基於 ASCII 的系統上',這將是:
awk '{print "\047" $0 "\047"}' input
'string1'
'string2'
'string3'
  1. 將引號作為變數傳遞
$ 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" }'

引用自:https://unix.stackexchange.com/questions/593212