在shell脚本中嵌入一个带有单引号的awk程序

时间:2015-07-02 10:29:16

标签: linux bash shell awk

我有一行文本文件nik.txt和一个简单的awk脚本,如下所示:

LagartijaNick>cat nik.txt
hey the're
LagartijaNick>cat tmp.awk
BEGIN {}
{
    searchName=tolower($0);
    if ( searchName ~ /'re/ ) {
       print $0
    }
}
LagartijaNick>awk -f tmp.awk nik.txt
hey the're

上面的awk脚本按预期打印整个记录。但现在我必须将awk嵌入到BASH脚本中,如下所示:

#!/bin/bash
infile=$1
function doThis () {
   awk 'BEGIN {}
   {
      searchName=tolower($0);
      if ( searchName ~ /'re/ ) {
         print $0
      }
   }' $infile
}
doThis
exit 0

返回:

./tmp.sh: line 9: syntax error near unexpected token `)'
./tmp.sh: line 9: `   if ( searchName ~ /\'re/ ) {'
简单,需要逃避单个语音标记?但我无法让它发挥作用。 我试过了:

if ( searchName ~ /\'re/ ) {
if ( searchName ~ /''re/ ) {

我做错了什么?我得到的只是语法错误...

我正在使用以下版本的bash:

LagartijaNick>/bin/bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

1 个答案:

答案 0 :(得分:0)

将设置变量的建议与单引号结合起来并删除不必要的BEGIN:

#!/bin/bash
infile=$1
function doThis () {
    read -d '' cmd <<EOA
    awk -vQ="'" '
    {
        searchName=tolower(\$0);
        if ( searchName ~ Q"re" ) {
            print \$0
        }
    }' $infile
EOA
    eval $cmd
}
doThis
exit 0