【发布时间】:2011-02-04 18:45:33
【问题描述】:
我想在文件中搜索 string1 OR string2 OR string3 等的出现,并仅打印这些行(到 stdout 或文件,任一个)。如何在 bash 中轻松做到这一点?
【问题讨论】:
-
要查找文件中的所有字符串,可以在 FOR 循环中运行 grep:unix.stackexchange.com/a/462445/43233
我想在文件中搜索 string1 OR string2 OR string3 等的出现,并仅打印这些行(到 stdout 或文件,任一个)。如何在 bash 中轻松做到这一点?
【问题讨论】:
你也可以使用 awk
awk '/string1|string2|string3/' file
借助 awk,您还可以在需要时轻松使用 AND 逻辑。
awk '/string1/ && /string2/ && /string3/' file
【讨论】:
grep "string1\|string2\|string3" file_to_search_in
【讨论】:
另一种选择,特别是如果您要搜索的字符串数量很大,是将这些字符串放入由换行符分隔的文件中并使用:
grep -f file_of_strings file_to_search
【讨论】:
使用 Perl:
perl -lne 'print if /string1|string2|string3/;' file1 file2 *.fileext
使用 Bash 一个衬垫:
while read line; do if [[ $line =~ string1|string2 ]]; then echo $line; fi; done < file
使用 Bash 脚本:
#!/bin/bash
while read line
do
if [[ $line =~ string1|string2|string3 ]]; then
echo $line
fi
done < file
请注意,"[[ $line =~ string1|string2 ]]" 周围的空格都是相关的。即这些在 Bash 中失败:
[[ $line=~string1|string2 ]] # will be alway true...
[[$line =~ string1|string2]] # syntax error
【讨论】:
do 和 done 会为您做到这一点。
还有:
grep -e 'string1' -e 'string2' -e 'string3'
【讨论】: