如何查找以**开头的行

Sha*_*ter 8 grep text-processing quoting

我需要查找文件中是否有任何行以**.

我不知道该怎么做,因为它*被 shell 解释为通配符。

grep -i "^2" test.out
Run Code Online (Sandbox Code Playgroud)

如果该行以 2 开头但有效

grep -i "^**" test.out 
Run Code Online (Sandbox Code Playgroud)

显然不起作用。

(我还需要知道该行是否以 a 结尾,)但还没有尝试过)。

Ste*_*ris 19

使用\字符转义 * 使其成为普通字符。

grep '^\*\*' test.out
Run Code Online (Sandbox Code Playgroud)

还要注意单引号'而不是双引号"以防止外壳扩展事物

  • 虽然它不必被转义,但不转义第一个星号会让一个不经意的观察者更加困惑,就好像你在匹配“任意数量的行开头,后跟一个星号”。任何使正则表达式对维护者更直观的东西都是一个好主意。=) (5认同)
  • 在这种特殊情况下,第一个 `*` 不需要转义,fwiw。 (3认同)

Rah*_*hul 7

由于您想检查以 开头**和结尾的行),您可以grep像这样组合两个操作,

grep '^*\*' test.out | grep ')$'
Run Code Online (Sandbox Code Playgroud)

或者使用这样的单个grep命令,

grep -E '^\*\*.*\)$' test.out
Run Code Online (Sandbox Code Playgroud)

解释

  • ^\*\* : 匹配行以 **
  • .* : 匹配之后的所有内容 **
  • \)$: 匹配行也有)在行尾。