3

行があり、その中に一重引用符が埋め込まれているかどうかを知りたいです。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

これは Solaris 10 の awk 用であるため、この場合、gawk ソリューションは適用されません。

助言がありますか?

4

3 に答える 3

11

シェル引用符の問題があります。コマンドを一重引用符で囲んでいると思われますawk。エスケープしたとしても、コマンド自体に一重引用符を含めることはできません。引用符を付けてみてください$'...'。これには、エスケープされた一重引用符を含めることができます。

awk $'{
    # Lots of other awk code...

    badix=index($0, "\'") }'

    # The rest of the awk code
   }'
于 2012-08-29T19:38:38.510 に答える
7

以下を使用する必要があります。

badix = index($0, "'"'"'"); 

\x27または一重引用符に16 進値を使用します。

badix = index($0, "\x27");
于 2012-08-29T19:32:53.193 に答える
5

以下にいくつかの方法を示します。

で実行する awk スクリプトを別のファイルに入れます。-fこの場合、シェルの引用符を避けて、動作し"'"ます

$ cat awkscript
#!/bin/awk -f
BEGIN{print "'"}
$ awk -f awkscript </dev/null
'
$ chmod +x awkscript
$ ./awkscript </dev/null
'

スクリプトを ' 引用符で囲み、' 引用符を終了し、リテラルの ' 引用符を連結してから、新しい ' 引用符を開始するシェルから実行します。

awk 'BEGIN{print "'\''"}' </dev/null

としてインストールされる 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"}'
于 2012-08-29T19:43:08.837 に答える