如何在文件中搜索多个字符串

时间:2010-04-06 11:36:24

标签: bash file search string

我想在文件中搜索string1或string2或string3等的出现,并且只打印那些行(到stdout或文件,一个)。我怎样才能在bash中轻松完成这个?

5 个答案:

答案 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'