我想在文件中搜索string1或string2或string3等的出现,并且只打印那些行(到stdout或文件,一个)。我怎样才能在bash中轻松完成这个?
答案 0 :(得分:13)
你也可以使用awk
awk '/string1|string2|string3/' file
使用awk,如果需要,您也可以轻松使用AND逻辑。
awk '/string1/ && /string2/ && /string3/' file
答案 1 :(得分:7)
grep "string1\|string2\|string3" file_to_search_in
答案 2 :(得分:3)
另一个选择,特别是当您要搜索的字符串数量很大时,将这些字符串放入由换行符分隔的文件中并使用:
grep -f file_of_strings file_to_search
答案 3 :(得分:1)
使用Perl:
perl -lne 'print if /string1|string2|string3/;' file1 file2 *.fileext
使用Bash one liner:
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 = ~tring1 | string2]]”周围的空格都是相关的。即这些在Bash中失败:
[[ $line=~string1|string2 ]] # will be alway true...
[[$line =~ string1|string2]] # syntax error
答案 4 :(得分:0)
此外:
grep -e 'string1' -e 'string2' -e 'string3'