Поиск строк на файлах

тащивший ответственно за обеспечение объединенного интерфейса к текущей аппаратной конфигурации машины. udev ответственен за управление различными операциями, требуемыми, когда изменения настроек оборудования, в то время как система жива.

2
28.04.2011, 22:16
6 ответов

Простые grep управляют с-e опцией:

 grep -e "string1" -e "string2" -e "stringn" file*.txt

Или можно поместить все строки поиска в файл под названием search.txt как это:

string1
string2
string3
...
...
stringN

и затем выполненный grep как это с -f опция:

grep -f search.txt file*.txt
7
27.01.2020, 21:50
  • 1
    можно использовать stdin в качестве файла echo -e "string1\nstring2\nstringn" | grep -f - search.txt file*.txt –  jcubic 28.04.2011, 18:24

Используйте grep для поиска всех строк в одной передаче:

grep -E -H 'string1|string2|stringn' file1.txt file2.txt filen.txt

-E позволяет Вам использовать символ вертикальной черты (|), не выходя из него. -H печатает имя файла для каждого соответствия. Регулярное выражение использует каналы для разделения каждой строки, так, чтобы grep попытается соответствовать каждому в порядке.

4
27.01.2020, 21:50

Существует вариант grep, который поддерживает эту функцию для больших наборов строк, попробовать

fileWithListOfSearchTargets=myFileOfSearchTargets.txt

fgrep -f ${fileWithListOfSearchTargets} file1 file2 ... filen

(Переменные и имена файлов предназначены, чтобы самозарегистрировать, можно использовать любое имя, которое Вы любите),

Необходимо ввести все строки поиска в файл.

Никакое продвижение или конечные пробелы, если Вы не ожидаете, что они будут соответствовать в Вашем списке файлов. Существует предел размеру что большинство fgreps может обработать. Не пытайтесь переполнить 10K строки в один файл.

3
27.01.2020, 21:50

Лучший способ состоит в том, чтобы использовать grep:

grep -H 'string to search' file1.txt file2.txt filen.txt

будет искать указанные файлы строку и распечатывать согласующие отрезки длинной линии наряду с именем файла, где соответствие было найдено.

0
27.01.2020, 21:50
  • 1
    И если необходимо сделать это для произвольного числа строк, включите его в для цикла. Например: for searchString in "string1 string2 stringn"; do grep -H $searchString file1.txt file2.txt; done Однако это предполагает, что searchString является легким словом - если он имеет символы, пробелы, Вам нужно больше выхода. –   28.04.2011, 18:13

Unix находит команду:

find . -exec grep "i want to find this string" '{}' \; -print

будет искать от текущего dir и вниз.

Это работает также:

egrep -r 'arbitrary string' *
-2
27.01.2020, 21:50
  • 1
    Использование находки здесь не добавляет ничего, что grep не может сделать отдельно. Конечно, находка МОГЛА привыкнуть к цели найти, что полезный набор файлов для отправки к grep но в этом случае grep сможет сделать, то же с с-R отмечает и сохраняет большую путаницу. –  Caleb 07.05.2011, 14:15
egrep "(string1|string2|string3)" file{1..3}.txt
-2
27.01.2020, 21:50
  • 1
    Это не добавляет ничего полезного, не охваченного в других ответах. Если Вы хотите показать, что альтернативный синтаксис рассматривает комментарий одного из других ответов вместо этого. –  Caleb 07.05.2011, 14:14
  • 2
    я представил синтаксис фигурных скобок, для обращения к нескольким файлам. У нас уже было обсуждение meta. –  user unknown 07.05.2011, 15:55

Теги

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