我有一条线,我想知道它内是否有任何嵌入的单引号字符.使用awk,我尝试了几种变体
badix = index($0,"\047") -- this does not find it
badix = index($0, "'") -- throws a fit
badix = index($0, "\'") -- throws a fit
badix = index($0, \') -- throws a fit
Run Code Online (Sandbox Code Playgroud)
这适用于Solaris 10上的awk,因此在这种情况下gawk解决方案不适用.
有什么建议?
che*_*ner 11
你有一个shell引用问题,我怀疑你是awk用单引号括起命令,即使转义也不能包含单引号.试试$'...'引用,其中可以包含转义单引号:
awk $'{
# Lots of other awk code...
badix=index($0, "\'") }'
# The rest of the awk code
}'
Run Code Online (Sandbox Code Playgroud)
你应该使用:
badix = index($0, "'"'"'");
Run Code Online (Sandbox Code Playgroud)
或使用十六进制值\x27作为单引号:
badix = index($0, "\x27");
Run Code Online (Sandbox Code Playgroud)
这有几种方法:
将awk脚本放在您运行的单独文件中-f,在这种情况下,您可以避免使用shell引号,因此"'"可以使用
$ cat awkscript
#!/bin/awk -f
BEGIN{print "'"}
$ awk -f awkscript </dev/null
'
$ chmod +x awkscript
$ ./awkscript </dev/null
'
Run Code Online (Sandbox Code Playgroud)
从shell运行它,在那里将脚本括在'引号中,结束'quote,concat a literal'引用,然后开始一个新的引用.
awk 'BEGIN{print "'\''"}' </dev/null
Run Code Online (Sandbox Code Playgroud)
使用nawk代替,安装为/usr/xpg4/bin/awk.它符合posix而且没那么无用.
PATH=/usr/xpg4/bin:$PATH
awk -v q=\' 'BEGIN{print q}'
awk 'BEGIN{print "\x27"}'
awk 'BEGIN{print "\047"}'
Run Code Online (Sandbox Code Playgroud)