我需要一些关于 bash 的帮助。我只学过 grep、awk、find、sed 等。
假设我有一个文件,people.txt
在多行中每行都有不同的名称,但每行都会出现一个名称。例如:
Ln1 - chris butcher, sam witwickie, joseph stalin, king kunta
Ln2 - Thor, ironman, mariah carey, chris butcher
Ln3 - jen love, chris butcher, jeep lake
我该如何在每一行上打印克里斯·布彻的名字?请注意,克里斯·布彻的名字出现在行的不同部分
我希望的预期结果是:
Ln1 - chris butcher
Ln2 - chris butcher
Ln3 - chris butcher
我知道 grep -i "chris butcher" 会突出显示每行中的名称,但我需要它在每行中仅打印“chris butcher”作为结果。
先谢谢了!
答案1
这个 bash 脚本应该可以完成这个工作:
#!/bin/bash
fileName="/path/to/file.txt"
identifier="chris butcher"
counter=1
while read oneLine; do
if [[ "$oneLine" == *"$identifier"* ]]; then
echo "Ln$counter - $identifier"
((counter++))
fi
done < "$fileName"
echo
答案2
给定此输入文件:
Ln1 - chris butcher, sam witwickie, joseph stalin, king kunta
Ln2 - Thor, ironman, mariah carey, chris butcher
Ln3 - jen love, chris butcher, jeep lake
使用grep -o 'chris butcher' people.txt
将输出:
chris butcher
chris butcher
chris butcher
正如@Raffa在评论中所建议的那样,您可能还希望使条件更加严格,将单词表达式与匹配-w
,以避免错误匹配,例如“chris butcherfoo”或“foochris butcher”。此外,您的示例有一些行号,因此-n
对您来说可能也很有趣。