Answers:
到目前为止,没有任何答案涉及真正的问题。解释为什么它无法按预期工作将很有帮助。
grep -i "^**" test.out
因为你引述的模式的grep,*
是不是由shell扩展。它按原样传递给grep。这在手动页面说明[1]为bash的[2] :
用双引号引起来的字符将保留引号中所有字符的文字值,但$,`,\除外,并且在启用历史记录扩展功能时,!。
正则表达式是一个图案描述一组串。
*
是正则表达式中的关键模式之一。默认情况下,grep对其解释如下:
* The preceding item will be matched zero or more times.
这意味着您的模式^**
没有任何意义。可能会尝试将行的开头匹配零次或多次,两次。不管它是什么意思。
解决方案是引用它:
任何具有特殊含义的元字符都可以在其前面加上反斜杠来引用。
grep -i "^\*\*" test.out
[1]我不建议阅读。请改用man dash
或类似名称。
[2]没有给出外壳,所以我假设为bash。
其他选项。
您可以使用sed
或awk
也
$ sed -n '/^*\*/p' test.out
$ awk '/^*\*/' test.out
要知道行为此与)
使用还grep
或sed
或awk
$ grep ')$' test.out
$ sed -n '/)$/p' test.out
$ awk '/)$/' test.out
'/^*\*/&&/)$/'
...
*
在这种特殊情况下,第一个不需要转义。