Art*_*nov 8 awk shell-script quoting escape-characters
无法弄清楚如何在使用 awk 时转义所有内容。
我需要用单引号将每个输入字符串括起来,例如
input
string1
string2
string3
output
'string1'
'string2'
'string3'
Run Code Online (Sandbox Code Playgroud)
一直在与逃避' " $0
和其他一切作斗争,我就是无法让它发挥作用。要么 $0 直接传递给 bash,要么发生其他事情。
ste*_*ver 18
这里有几种方法:
使用八进制转义序列。在'
编码为字节 39(八进制 047)的基于 ASCII 的系统上,这将是:
awk '{print "\047" $0 "\047"}' input
'string1'
'string2'
'string3'
Run Code Online (Sandbox Code Playgroud)
将引号作为变量传递
$ awk -v q="'" '{print q $0 q}' input
'string1'
'string2'
'string3'
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 13
在 awk 代码中,只需将撇号放在双引号内。无论这些字符串是如何构造的(文字、变量、字段引用、括号表达式等),您都可以通过将它们彼此相邻(并列)来连接字符串。
{ print "'" $0 "'" }
Run Code Online (Sandbox Code Playgroud)
如果此 awk 代码包含在 shell 脚本中并且 awk 代码位于单引号文字中,则必须安排将单引号字符传递给 awk。使用 single-quote-backslash-single-quote-single-quote'\''
在单引号 shell 文字中包含单引号字符。
awk '{ print "'\''" $0 "'\''" }'
Run Code Online (Sandbox Code Playgroud)
或者,在不使用单引号字符的情况下表达 awk 代码。您可以使用反斜杠后跟三个八进制数字来表示 awk 中字符串文字中的任何字符。对于基于 ASCII 的系统上的单引号,那就是\047
.
awk '{ print "\047" $0 "\047" }'
Run Code Online (Sandbox Code Playgroud)
awk 代码只需要是
{ print "'" $0 "'" }
Run Code Online (Sandbox Code Playgroud)
您可以将其放入文件中,这样您就不需要引用任何内容:
$ printf 'a\nb\n' | awk -f quote.awk
'a'
'b'
Run Code Online (Sandbox Code Playgroud)
或者使用双引号字符串,并对引号和美元符号进行转义:
$ printf 'a\nb\n' | awk "{ print \"'\" \$0 \"'\" }"
Run Code Online (Sandbox Code Playgroud)
或者在 Bash/ksh/zsh 中,使用$'...'
引号的形式,这样可以转义里面的单引号:
$ printf 'a\nb\n' | awk $'{ print "\'" $0 "\'" }'
Run Code Online (Sandbox Code Playgroud)
请注意,您不需要这样做awk
。
您可以改用paste
基本实用程序:
< input paste -d "'" /dev/null - /dev/null
Run Code Online (Sandbox Code Playgroud)
与awk
基于或sed
基于的解决方案相比,它会更高效且限制更少。
归档时间: |
|
查看次数: |
8577 次 |
最近记录: |