Как искать несколько строк в файле

Я хочу искать возникновение string1 ИЛИ string2 ИЛИ string3, и т.д. в файле, и распечатать только те строки (к stdout или файлу, любой одному). Как я могу легко сделать это в ударе?

5
задан topwoman 6 April 2010 в 11:36
поделиться

5 ответов

С 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 script:

#!/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
1
ответ дан 18 December 2019 в 06:34
поделиться
grep "string1\|string2\|string3" file_to_search_in
7
ответ дан 18 December 2019 в 06:34
поделиться

вы также можете использовать awk

awk '/string1|string2|string3/' file

С awk вы также можете легко использовать логику AND, если это необходимо.

awk '/string1/ && /string2/ && /string3/' file
13
ответ дан 18 December 2019 в 06:34
поделиться

Также:

grep -e 'string1' -e 'string2' -e 'string3'
0
ответ дан 18 December 2019 в 06:34
поделиться

Еще один вариант, особенно если количество строк, которые вы хотите искать, велико, - поместить эти строки в файл, разделенный символами новой строки, и использовать:

grep -f file_of_strings file_to_search
3
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: