Я хочу искать возникновение string1 ИЛИ string2 ИЛИ string3, и т.д. в файле, и распечатать только те строки (к stdout или файлу, любой одному). Как я могу легко сделать это в ударе?
С 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
вы также можете использовать awk
awk '/string1|string2|string3/' file
С awk вы также можете легко использовать логику AND, если это необходимо.
awk '/string1/ && /string2/ && /string3/' file
Еще один вариант, особенно если количество строк, которые вы хотите искать, велико, - поместить эти строки в файл, разделенный символами новой строки, и использовать:
grep -f file_of_strings file_to_search