grep 不能像往常一样在 Ubuntu 16.04 中工作

Fra*_*sco 3 grep

我意识到 grep 在 Ubuntu 16.04 中不能像往常一样工作。

证明:

/lib/systemd/system# grep root *
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

/lib/systemd/system# grep root .
grep: .: Is a directory
Run Code Online (Sandbox Code Playgroud)

它只能以这种方式工作。

/lib/systemd/system# grep root ./*
[...]
Run Code Online (Sandbox Code Playgroud)

Ubuntu 16.04 有什么改变吗?

mur*_*uru 13

/lib/systemd/system# grep root *
grep: invalid option -- '.'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information
Run Code Online (Sandbox Code Playgroud)

看起来你有一个名为-.. 您可以通过使用 分隔选项中的文件名来解决此问题--,例如:

grep root -- *
Run Code Online (Sandbox Code Playgroud)
/lib/systemd/system# grep root .
grep: .: Is a directory
Run Code Online (Sandbox Code Playgroud)

grep默认情况下不递归,使用-R

grep -R root .
Run Code Online (Sandbox Code Playgroud)

只使用-R没有目录就可以了(grep假设当前目录):

grep -R root
Run Code Online (Sandbox Code Playgroud)

  • @Thomas 将 `-.` 放在引号中无济于事,因为引号会影响 shell 处理,这是 grep 参数处理的一个问题。你可以做类似`./-.` (3认同)
  • 值得注意的是,这个 `--` 技巧适用于大多数命令行程序,其中 `--` 后面的任何参数都被视为位置参数,即使它会被解释为可选参数。另一种选择是将文件放在引号中,例如 `grep root '-.'` 但这当然不适用于通配符 (2认同)