我正在完成一个涉及解决谋杀谜团的命令行游戏/挑战。
其中一个步骤是使用grep在一个文件中搜索多个关键字来搜索可疑对象。
但是该文件包含成千上万行具有以下格式的文本:
License Plate: L337ZR9
Make: Honda
Color: Red
Owner: Katie Park
Height: 6'2"
我尝试通过以下方式使用grep:
cat vehicles | grep -i 'L337' | grep -i 'honda'
ls | grep -i 'honda\|blue\|L337'
但是据我了解,这些命令将为我提供与我的三个搜索词中的任何一个匹配的结果。
我需要什么命令来搜索车辆文件并显示仅匹配L337牌照的Blue Honda的匹配项?换句话说,什么命令允许grep查找并显示多个匹配搜索词的结果?
答案 0 :(得分:1)
使用 GNU grep
。
示例
源
License Plate: L337ZR9
Make: Honda
Color: Blue
Owner: Katie Park
Height: 6'2"
License Plate: L338ZR9
Make: Honda
Color: Black
Owner: James Park
Height: 6'0"
命令
grep -Pzo '\w+:\s*L337ZR9\n\w+:\s+Honda\n\w+:\s*Blue' file
结果
Plate: L337ZR9
Make: Honda
Color: Blue
说明
来自grep
个人:
-z, --null-data Treat the input as a set of lines,
注意:grep (GNU grep) 2.20
已测试
答案 1 :(得分:0)
首先要意识到您是grep
ping记录,而不是行。
因此将5行记录合并为一行:
cat licenseplates | paste - - - - -
现在grep
突然变得很容易了:
cat licenseplates | paste - - - - - |
grep -i 'L337' | grep -i 'honda' | grep -i blue
最后,您需要将匹配的行折回5行记录中:
cat licenseplates | paste - - - - - |
grep -i 'L337' | grep -i 'honda' | grep -i blue |
sed 's/\t/\n/g'