在Ack:AND运算符+ -interpret开关中等效“mdfind”查询

时间:2013-07-12 20:13:45

标签: regex linux macos ack

我正在尝试为我的Linux机器修改Brett Terpstra的方便QuickQuestion script。什么是Ack相当于以下mdfind命令:

mdfind -onlyin "$NOTESDIR" "filename:.$NOTESEXT AND filename:\"$NOTESPRE\" AND ${INPUT%\?}"
...
echo "`mdfind -onlyin \"$NOTESDIR\" -interpret \"filename:.$NOTESEXT AND filename:$NOTESPRE AND ${INPUT%\?}\"`"

我似乎无法让AND部分正确。我知道因为Ack是Perl所以必须使用括号。但是例如(?="$NOTESPRE")(?="$INPUT")给出了错误。

此外,我不知道如何处理第二行的-interpret开关。

这么简单的查询感到困惑......感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

双前行需要考虑很多因素,因此您需要在通配符模式中添加通配符,例如:

>>echo "foo bar \$NOTESPRE \$INPUT baz" | ack "^(?=.*$NOTESPRE)(?=.*$INPUT).*$"

返回:

foo bar $NOTESPRE $INPUT baz

如果需要在特定目录中搜​​索包含此行的文件,只需在命令行上指定目录:

ack "^(?=.*$NOTESPRE)(?=.*$INPUT).*$" path\to\directoryToSearch

-interpret在正则表达式中没有直接并行。