8
cat a.txt | grep -ri '->'

我想用文本箭头-> grep 行。但在 linux shell -中,表示选项的开始,
表示 将>输出管道输出到文件。

所以在执行上面给出的命令后,我得到了错误

[root@rs169 document_root]# cat a.txt | grep -ri '->'
grep: invalid option -- '>'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

有人可以告诉如何正确地做到这一点吗?

4

5 回答 5

10

另一种方法是使用--- 这告诉 grep 您已经使用完标志,并且-在此之后出现的任何标志都将按字面意思解释。

$ echo "->" | grep -- "->"
->
于 2013-08-08T09:39:07.487 回答
4

使用-ekey 显式声明模式:grep -rie '->'

 -e PATTERN, --regexp=PATTERN
          Use PATTERN as the pattern.  This can be used to specify multiple search patterns, or to protect a pattern beginning with a hyphen (-).  (-e is specified by POSIX.)
于 2013-08-08T09:50:30.303 回答
4

grep -ri '\->' a.txt 应该做

[A]$ grep -ri '\->'  a.txt
12 ->2
[A]$ cat a.txt
12 ->2
11

[A]$ sh -version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
于 2013-08-08T09:36:11.713 回答
2

在 linux 命令 shell 上,您可以转义- Like this

cat a.txt | grep -ri '\->'

顺便说一句,你为什么需要-ri选项?->没有任何字母表(-i用于不区分大小写的搜索)并且 cat a.txt 不会生成您需要搜索的递归文件/管道列表

于 2013-08-08T09:37:41.630 回答
2

虽然您可能会-在模式中逃脱,但它不起作用的原因是:grep导致认为>(模式的一部分->)是传递给它的选项。由于grep没有选项>,它会抱怨。

正确的方法是告诉 grep 通过添加停止期望选项--

cat a.txt | grep -ri -- '->'
于 2013-08-08T09:40:07.460 回答