Как искать несколько строк в файле - PullRequest
5 голосов
/ 06 апреля 2010

Я хочу найти в файле строку1 ИЛИ строку2 ИЛИ строку3 и т. Д. И распечатать только эти строки (в стандартный вывод или в файл, либо одну).Как я могу легко сделать это в Bash?

Ответы [ 5 ]

13 голосов
/ 06 апреля 2010

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

awk '/string1|string2|string3/' file

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

awk '/string1/ && /string2/ && /string3/' file
7 голосов
/ 06 апреля 2010
grep "string1\|string2\|string3" file_to_search_in
3 голосов
/ 06 апреля 2010

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

grep -f file_of_strings file_to_search
1 голос
/ 06 апреля 2010

с 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
0 голосов
/ 06 апреля 2010

Также:

grep -e 'string1' -e 'string2' -e 'string3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...