【发布时间】:2015-07-02 10:29:16
【问题描述】:
我有一个单行文本文件 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)
【问题讨论】:
-
脚本中间有一个单引号,它结束了引用的命令,bash 尝试解释
)。此外,BEGIN 块虽然无害,但完全没有意义。在 bash 中转义单引号真的很困难,你最好将它作为变量传递给脚本-vQ="'"然后你的正则表达式比较将是$0 ~ Q"re" -
grep -i "'re" nik.txt -
脚本格式混乱。反引号 (`) 实际上是脚本的一部分,还是试图将整个内容标记为代码?我开始编辑您的问题以修复格式,并注意到您没有一组花括号来定义函数
doThis的范围,因此很难确切知道您的意图。 (也许这就是问题所在?) -
我应该说部分问题。显然你也需要转义单引号。