传递正则表达式作为参数
Passing regular expression as parameter
我正在尝试将正则表达式作为参数传递。我应该在我的代码中修复什么?
我的目标是发送 find
和正则表达式字符串,然后在参数上使用 grep
这样我就可以用 grep
找到的内容做任何我想做的事情(打印出现次数) .
这是我发送的:
$ ./lab12.sh find [Gg]reen
这是我的 bash 代码:
if [[ "" == "find" ]]
then
declare -i cnt=0
for file in /tmp/beatles/*.txt ; do
if [[ grep -e ]] //problem is here...
then
((cnt=cnt+1))
fi
done
echo "$cnt songs contain the pattern """
fi
if 语句接受一个命令。 [[
是一个,grep
是另一个,写 [[ grep ... ]]
本质上和写 vim grep
或 cat grep
等一样错误,只需使用:
if grep -q -e "$pattern"
then
...
相反。
grep 的 -q
开关将禁用输出,但当模式匹配时将退出状态设置为 0(成功),否则为 1(失败),if 语句将只执行 then如果命令成功则阻止。
使用 -q
将允许 grep 在第一行匹配时立即退出。
一如既往,请记住将参数扩展用双引号引起来,以避免 pathname expansion and wordsplitting.
请注意,方括号 [...]
将由您的调用 shell 解释,您应该将它们转义,或者将整个模式用引号引起来。
始终建议使用单引号,因为唯一的特殊字符是另一个单引号。
$ ./lab12.sh find '[Gg]reen'
我正在尝试将正则表达式作为参数传递。我应该在我的代码中修复什么?
我的目标是发送 find
和正则表达式字符串,然后在参数上使用 grep
这样我就可以用 grep
找到的内容做任何我想做的事情(打印出现次数) .
这是我发送的:
$ ./lab12.sh find [Gg]reen
这是我的 bash 代码:
if [[ "" == "find" ]]
then
declare -i cnt=0
for file in /tmp/beatles/*.txt ; do
if [[ grep -e ]] //problem is here...
then
((cnt=cnt+1))
fi
done
echo "$cnt songs contain the pattern """
fi
if 语句接受一个命令。 [[
是一个,grep
是另一个,写 [[ grep ... ]]
本质上和写 vim grep
或 cat grep
等一样错误,只需使用:
if grep -q -e "$pattern"
then
...
相反。
grep 的 -q
开关将禁用输出,但当模式匹配时将退出状态设置为 0(成功),否则为 1(失败),if 语句将只执行 then如果命令成功则阻止。
使用 -q
将允许 grep 在第一行匹配时立即退出。
一如既往,请记住将参数扩展用双引号引起来,以避免 pathname expansion and wordsplitting.
请注意,方括号 [...]
将由您的调用 shell 解释,您应该将它们转义,或者将整个模式用引号引起来。
始终建议使用单引号,因为唯一的特殊字符是另一个单引号。
$ ./lab12.sh find '[Gg]reen'