Shell
如何從管道中 grep 多個模式
我想在列表中找到三個模式。我試著打字
$ pip3 list | grep -ei foo -ei bar -ei baz
但外殼拋出一個
broken pipe error
和一個大的Traceback
。我如何
grep
處理從管道傳遞到的列表中的多個模式grep
?
嘗試:
pip3 list | grep -Ei 'foo|bar|baz'
這是來自我的 Arch 伺服器的真實範例:
pip3 list | grep -Ei 'ufw|set' setuptools 40.0.0 ufw 0.35
作業系統和
grep
資訊:uname -a Linux archlinux 4.16.6-1-ARCH #1 SMP PREEMPT Mon Apr 30 12:30:03 UTC 2018 x86_64 GNU/Linux grep --version grep (GNU grep) 3.1 Copyright (C) 2017 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. Written by Mike Haertel and others, see <http://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
原因
grep -ei foo -ei bar -ei baz
不起作用是因為該
-e
選項的語義是-e PATTERN
,如grep -i -e foo -e bar -e baz
…這就是命令應該看起來的樣子。該
-i
選項(用於不區分大小寫的匹配)只需指定一次,並將影響所有模式。隨著
-ei foo
您要求在文件grep
中查找模式。i``foo
“斷管”錯誤來自
pip3
嘗試寫入死管道的末尾。管道已死,因為grep
找不到文件foo
,bar
或baz
,並終止(出現三個“找不到文件”錯誤)。追溯來自pip3
哪個 Python 程序(因此它可以準確地告訴您故障發生在 Python 程式碼的哪個位置)。