我想检查我的变量是否具有此格式--- 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.
)
如何重新编写正则表达式以匹配预期的字符串?
感谢。
答案 0 :(得分: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- - &gt; baz“。