1

Мне нужно выполнить команду несколько раз, каждый раз с новым значением:

grep VALUE0 myfile.txt
grep VALUE1 myfile.txt
grep VALUE2 myfile.txt

Поскольку команда grep является "специально созданной" (не всегда одинаковой) и только список ЗНАЧЕНИЙ всегда одинаков, я не хочу помещать команду grep в цикл внутри bash-файла. Я бы предпочел сохранить свой список ЗНАЧЕНИЙ в отдельном файле, например «values.txt», и позволить специальной командной оболочке выполнить цикл по этому списку значений, считанному из «values.txt».

3 ответа3

2

Вы можете сделать это используя xargs:

xargs -a values.txt -I {} grep {} myfile.txt

Это означает, что файл values.txt читается, по одной строке за раз, затем выполняется команда grep ... myfile.txt , где ... заменяется содержимым прочитанной строки (я использовал {} потому что это то, что find и использует.)

При этом, я также могу сказать вам, что с

egrep 'VALUE0|VALUE1|VALUE2' myfile.txt

Вы можете искать более одного текста одновременно.

2

Из руководства grep :

-f ФАЙЛ, --file = ФАЙЛ

Получить шаблоны из файла, по одному на строку. Пустой файл содержит ноль шаблонов и поэтому ничего не соответствует. (-f определяется POSIX.)

Вы можете создать файл с шаблонами, по одному на строку, и просто запустить grep -f patternfile … . Возможно, это не подходит вам, но это трудно понять без явных примеров.

0

Попробуй это:

#!/bin/bash

while read value
do
    grep $value myfile.txt
done < values.txt

Сохраните values в файле values.txt , каждое в отдельной строке.

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