3

Я хочу использовать функцию grep Unix, чтобы извлечь несколько строк (с разными ключевыми словами) из файла в одной командной строке.

Например, у меня есть что-то вроде:

doc-A1-151
file-A2-15646
table-A3-1654
file-B1-15654
doc-B2-15654
table-B3-13546
file-C1-164654
doc-C2-16354
table-C3-13565

И я хочу подверсию файла только с линиями A1, B3 и C2.

Как я могу это сделать?

2 ответа2

6

Grep позволяет вам использовать регулярные выражения для сопоставления шаблонов в файле, используя флаг -E , или вы можете использовать команду egrep которая эквивалентна grep -E:

grep -E 'A1|B3|C2' filename

или же

egrep 'A1|B3|C2' filename

Вертикальная черта, | , оператор OR, означающий совпадение строки A1 или B3 или C2.

Синтаксис регулярного выражения варьируется от инструмента к инструменту, но обычно синтаксис один и тот же. Вот набор тестов regex для Ruby, который я часто использую для тестирования и построения регулярных выражений: http://rubular.com/r/mJyIMO5hJN

Тем не менее, любое введение в регулярные выражения должно сопровождаться предупреждением о том, что они ограничены в своих возможностях.

Некоторые люди, сталкиваясь с проблемой, думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы.

5

Нашел это. Поместите термины в текстовый файл, разделенные новыми строками, затем введите его в качестве шаблона для соответствия с флагом -f .

pattern_file.txt:

A1
B3
C2

Команда:

grep -f pattern_file.txt input_file.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .