使用正则表达式shell脚本比较文本(使用破折号)

时间:2013-02-15 19:28:22

标签: regex grep

我想检查我的变量是否具有此格式--- 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.

(这是OSXgrep'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.

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

感谢。

1 个答案:

答案 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“。