我有一个文本文件,我想搜索具有search_string但没有exclude_string的行。
在终端中,以下给出了我想要的输出:
grep "search_string" | grep -v "\(exclude_string_A\|exclude_string_B\)"
我有一个bash脚本,用于扫描文本文件中的特定问题(通常使用grep和sed),我想在其中添加此搜索,但似乎无法使其正常工作。似乎第一个grep命令的输出没有被用作第二个的输入。
例如,对于包含以下内容的文件:
Gary: yes, that's what I said.
Paul: well, I didn't hear you.
Gary: okay, let's go.
在bash脚本中,相关行是:
grep "Gary:" | grep -v "\(said\|told\)" $1
但是输出文件包含该部分的内容:
Paul: well, I didn't hear you.
Gary: okay, let's go.
我希望这里缺少一些简单的东西!
您的想法是正确的,但您的输入文件/字符串参数放置在错误的位置。它应该写成
grep "Gary:" "$1" | grep -v "\(said\|told\)"
这意味着应用第一个grep
表达式来匹配所有包含Gary
或过滤包含单词said
或的行told
。
经过尝试,由于是在管道上运行,因此两个grep
过程都将开始,但是之后的部分将|
处理输入$1
,就好像它是文件一样,而不是从管道的标准输入中获取输入,并打印您看到的几行。
但是此时,您看到的是终端挂起,因为第一个终端grep
仍在等待其标准输入流上的输入,但没有看到终端。按下Ctrl-C发送信号SIGINT信号,最终杀死管道。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句