使用 grep 在不同的行上搜索多个关键字
Using grep to search for multiple keywords on different lines
我正在完成涉及解决谋杀之谜的命令行 game/challenge。
其中一个步骤是使用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 的蓝色本田 - 换句话说,什么命令允许 grep 查找和显示多个匹配搜索词的结果?
使用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
已测试
首先意识到你是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'
我正在完成涉及解决谋杀之谜的命令行 game/challenge。
其中一个步骤是使用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 的蓝色本田 - 换句话说,什么命令允许 grep 查找和显示多个匹配搜索词的结果?
使用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
已测试
首先意识到你是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'