为什么搜索字符只能在搜索字符串的末尾而不是在开头?

时间:2013-11-19 13:36:25

标签: regex string search ksh

我最初想要搜索文件并找到与搜索字符串完全匹配的行。所以我在我的剧本中使用了这个:

grep -E ^"${sSearchString}"$ <file name>

其中^$分别标记了行的开头和结尾。

然后我意识到该行可能包含前导或尾随空格。要忽略尾随空格,我将代码更改为:

grep -E ^"${sSearchString}*( )"$ <file name>

再次正常工作 1

但是,这对前导空格不起作用:

grep -E ^"*( )${sSearchString}*( )"$ <file name>

运行它(从命令行,如下所示:grep -E ^"*( )<search string>*( )"$ <file name>)给出了这个错误:

grep: RE error in ^*( )search string*( )$ ?, *, +, or { } not preceded by valid regular expression

为什么*( )在搜索字符串之前失败但在之后工作?

1虽然将*( )替换为*(\s)但未返回任何内容。任何想法为什么不呢?

2 个答案:

答案 0 :(得分:2)

你的语法错了。它应该是( )*,而不是*( )

grep -E ^"( )*${sSearchString}( )*"$ <file name>

此外,如果您也想忽略制表符和换行符,请使用\s*

答案 1 :(得分:1)

它最终适用,因为重复是g而不是( )

一开始就失败了,因为没有什么可重复的。