0

我想检查我的变量是否具有这种格式--- foobar---> <some other stuff> 换句话说,我想知道文本是否以--- foobar --->

所以我使用grep -q但得到了这个错误:

$echo "---  foobar---> subtree " | grep -q "--- fooobar--->*" 
grep: unrecognized option `--- fooobar--->*'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

(这是OSX,和grep's version is:

$ grep --v
grep (GNU grep) 2.5.1

Copyright 1988, 1992-1999, 2000, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

)

如何重写我的正则表达式以匹配预期的字符串?

谢谢。

4

1 回答 1

3

-e您可以通过在正则表达式之前添加来修复错误:

grep -q -e "--- fooobar--->*"

从手册页:

 -e PATTERN, --regexp=PATTERN
        Use PATTERN as the pattern; useful to protect patterns beginning with -.

至于正则表达式本身,*在正则表达式中的意思是“重复前一个字符零次或多次”,因此您的正则表达式正在检查--- fooobar---然后是零个或多个>字符。

如果要匹配任意数量的任意字符,请.*改用:

grep -q -e "--- fooobar--->.*"

但是,由于看起来您只是在检查该行是否匹配,.*所以最后并没有真正改变任何东西,如果您完全删除它,它的行为方式会相同。

您可能还想^在模式的开头添加一个,这是行锚的开头,这样您就不会匹配像“一些其他内容...... --- fooobar---> baz”这样的行。

于 2013-02-15T19:37:00.923 回答