Chinaunix

标题: 已经解决.结贴 命令 grep - [-e] 选项的使用时机 (shell编程) [打印本页]

作者: sunzhiguolu    时间: 2015-09-06 15:16
标题: 已经解决.结贴 命令 grep - [-e] 选项的使用时机 (shell编程)
本帖最后由 sunzhiguolu 于 2015-09-16 16:10 编辑

在查看grep命令帮助文档时,发现有一个 -e 选项,但一直不理解此选项在什么情况下能够拍上用场?

能否提供一个简单示例,说明此选项的意义? 小弟在此谢过...
作者: stupid_lee    时间: 2015-09-06 15:37
应该默认就是 -e  不需要刻意添加
作者: jason680    时间: 2015-09-06 15:48
回复 1# sunzhiguolu

$ cat a.txt
1
2
3

$ grep 1 a.txt
1

$ grep 2 a.txt
2

$ grep -e 1 -e 2 a.txt
1
2


   
作者: 我爱你我的菜    时间: 2015-09-06 15:50
回复 3# jason680


    总能看见大神你啊
作者: sunzhiguolu    时间: 2015-09-06 15:53
回复 3# jason680
多谢大神给予的帮助,能否再列举 -e 选项其他方面的例子. 只要短小简单例子即可! 多谢多谢...

   
作者: jason680    时间: 2015-09-06 15:58
本帖最后由 jason680 于 2015-09-06 15:59 编辑

回复 5# sunzhiguolu

-e后接pattern就这样...

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]


       -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.)

   
作者: sunzhiguolu    时间: 2015-09-06 16:03
本帖最后由 sunzhiguolu 于 2015-09-06 16:27 编辑

回复 6# jason680
收到收到,小弟自行查阅帮助文档... 多谢多谢!
protect  a  pattern  beginning
              with a hyphen (-)

   
作者: Shell_HAT    时间: 2015-09-06 17:21
回复 5# sunzhiguolu


    就3楼那一个用法啊,你想要啥?
作者: sunzhiguolu    时间: 2015-09-06 17:27
本帖最后由 sunzhiguolu 于 2015-09-06 17:30 编辑

回复 8# Shell_HAT
大神您在逗我,您晓得...

别看小弟热闹啊,还请您出手相救!

   
作者: Shell_HAT    时间: 2015-09-06 21:13
回复 9# sunzhiguolu


    惭愧,不知道你的问题是什么。
作者: sunzhiguolu    时间: 2015-09-06 21:55
本帖最后由 sunzhiguolu 于 2015-09-06 22:12 编辑

回复 10# Shell_HAT
echo -e "-n\n-i\n-e" | grep -Pe '-(n|i|e)'


您真的没有爱心...

大神,对于我提出的问题其实我已经在网络上尝试查找相关的说明.也看了关于grep命令的帮助文档. 只是没有找到合适的方法去印证,还请大神给点建议,别再拿菜鸟穷开心了. 其实我也不希望将一些看似愚蠢的问题拿到论坛中浪费大家宝贵的时间,还请大神给予小弟多一些鼓励,支持.
                                     sunzhiguolu
作者: Shell_HAT    时间: 2015-09-07 08:10
回复 11# sunzhiguolu


嗯,类似于
  1. echo -e "-n\n-i\n-e" | grep -P -- '-(n|i|e)'
复制代码

作者: hjfeng1988    时间: 2015-09-07 09:55
or to  protect  a  pattern  beginning with a hyphen (-)
或者保护一个以"-"开头的表达式
  1. # cat file
  2. -a
  3. -b
  4. # grep -e -a file
  5. # grep -a file
复制代码

作者: sunzhiguolu    时间: 2015-09-07 10:03
本帖最后由 sunzhiguolu 于 2015-09-07 10:06 编辑

回复 12# Shell_HAT
大神,小弟还有一事不明还请指点...
echo -e "-n\n-i\n-e" | grep -P -- '-(n|i|e)'

未曾在帮助文档中找有这个红色的连续两个连字符部分的说明,这是啥选项啊! 真的很神奇,竟然也达到了相同的目的!

   
作者: sunzhiguolu    时间: 2015-09-07 10:08
回复 13# hjfeng1988
多谢前辈给出的生动示例,请您帮忙看看 grep 命令中连续的两个连字符表示的是一个什么含义,它是一个选项吗?

   
作者: sunzhiguolu    时间: 2015-09-07 14:47
回复 12# Shell_HAT
难道这两个连字符 "--",是由 shell 进行解析的? 用以表示其后面的 "-" 只是作为文本而不是作为选项进行解析?
小弟一头雾水,还请大神指点...

   
作者: Shell_HAT    时间: 2015-09-07 16:20
man bash
--        A -- signals the end of options and disables further option processing.  Any arguments after the -- are treated as filenames and arguments.  An argument of - is equivalent to --.
作者: jason680    时间: 2015-09-07 17:16
本帖最后由 jason680 于 2015-09-07 17:27 编辑

回复 15# sunzhiguolu


>> ... [-e] 选项 使用时机,啥时候能派上用场啊?

Ans: never

用grep多年...
你这讨论的 -e ....
记忆中,没用过...
作者: sunzhiguolu    时间: 2015-09-07 17:17
本帖最后由 sunzhiguolu 于 2015-09-07 20:39 编辑

回复 17# Shell_HAT
man bash
--        A -- signals the end of options and disables further option processing.  Any arguments after the -- are treated as filenames and arguments.  An argument of - is equivalent to --.

大神,您有点难为我了. 我的英语太烂了,我将句子用颜色分为3部分. 将我的理解贴出,有不对的地方还请大神指点...
1. 如果一对符号 "--"是以选项的最后一部分出现那么其后出现的以 "-"  开头的选项将不作为选项进行处理
2. 跟在一对 "--" 后面的任何参数都只作为文件名或者参数进行处理 (红色部分也不太明白)
3. 这一句不太懂...

还请您多多指点...  小弟拜谢...

按照以上的注释要求进行测试结果如下:
echo -e "-e\n-i\n-n" | grep -P -- -n '-(e|i|n)'
grep: -(i|n|e): 没有那个文件或目录

从上述的结果,感觉 "-n" 被作为搜索字符串进行处理,其后的 '-(e|i|n)' 被作为一个文件名进行解析.

再次进行印证:
  1. cat a
  2. -i
  3. -n
  4. -e
  5. ---------------------------------
  6. grep -- -n a
  7. -n
复制代码
据得到的结果,如果作为选项部分最后一次出现的连续的两个 "--", 在其后面只能存在两种形式的参数 (不知我的这种叫法是否合理):
a. 当接受来自管道命令的结果时,那么在其后只能接受一个作为搜索字符串的参数,即使指定的是一个选项也按照搜索字符串
    进行处理;
b. 如果为其后添加第二个参数时, grep 命令由于 "--" 的作用,将其理解为一个文件名进行解析;

由此得出:
A. 如果 grep 命令接受来自管道的命令的结果. 那么 选项 "--" 后面只能是 "搜索字符串";
B. 如果是从文件读入文本的话, 选项 "--" 后面参数的顺序为固定的 "搜索字符串", "目标文件";

不知我的理解是否正确,还请您指点...

作者: sunzhiguolu    时间: 2015-09-07 17:33
回复 18# jason680
我知道您是在逗我,我使用linux刚起步,在看grep命令的帮助文档时,碰到了 "-e" 这个选项. 在网上找了一些资料,并没有完全弄懂,所以才向大神们请教. 还请您多多理解,其实从您回复的帖子当中我能看出您是有意将一部分问题交给我自己去解决,但是我本人的基础较差加上非常烂的英文水平才导致一直讨饶各位大神. 如果在向您以及其他各位大神或者前辈回帖当中有什么不周到的地方,还请各位大神指出来. 小弟一定改正.

   最后,非常感谢您的回帖. 多谢多谢...
                                                     sunzhiguolu


   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2