файлы grep из списка

yum-buliddep управляйте устанавливает зависимости для создания пакета из источника, не устанавливая его. При использовании конфетки для установки об/мин, она установит зависимости из удаленных источников, если пакеты будут доступны.

yum install /root/x86_64/asterisk-1.8.12.2-1.fc15.x86_64.rpm

На более старых версиях конфетки Вы, возможно, должны использовать localinstall для локального файла:

yum localinstall /root/x86_64/asterisk-1.8.12.2-1.fc15.x86_64.rpm
14
14.01.2015, 01:42
5 ответов

Вы, кажется, смазываете список имён файлов, а не самих файлов. <(cat files.txt) просто перечисляет файлы. Попробуйте <(cat $(cat files.txt)), чтобы на самом деле скомкатентовать их и найти их как один поток, или

grep -i 'foo' $(cat files.txt)

, чтобы дать grep всем файлам.

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

while read filename; do grep -Hi 'foo' "$filename"; done < files.txt
22
27.01.2020, 19:50

Вы также можете сделать, чтобы пример Ориона был самым простым:

for i in $(cat files.txt); do grep -i 'foo' $i ; done

(для каждого файла, указанного в файлах. Atxt Выполните команду grep на нем.)

1
27.01.2020, 19:50

Посмотрите на http://mirror.centos.org/centos/6/os/x86_64/Packages/ , и вы узнаете, что можно установить (если вы, конечно, не добавили больше репозиториев).

Теперь

  • java-1.7.0-openjdk.x86 _ 64 - это пакет, содержащий JRE

  • java-1.7.0-openjdk-devel , содержащий материал для разработки (в основном, это не нужно, если вы хотите запустить Java приложений).

  • java-1.7.0 может быть метапакетом (это мое предположение, по крайней мере), который тянет в первый и, вероятно, некоторые другие вещи, которые часто используются вместе с ним. Это обычно способ убедиться, что пользователи получают то, что они обычно хотят, если единственное, что они знают, это то, что они хотят «установить Java 7».

-121--133694-

Похоже, вы пополняете список имен файлов, а не сами файлы. < (cat files.txt) просто перечисляет файлы. Попробуйте < (cat $ (cat files.txt)) фактически объединить их и выполнить их поиск в виде одного потока, или

grep -i 'foo' $(cat files.txt)

, чтобы передать все файлы.

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

while read filename; do grep -Hi 'foo' "$filename"; done < files.txt
-121--29679-
xargs grep -i -- foo /dev/null < files.txt

предполагая, что файлы пусты или ограничены новой строкой (где кавычки или обратные косые черты могут быть использованы, чтобы избежать этих разделителей). С помощью GNU xargs можно указать разделитель с помощью команды -d (которая затем отключает обработку кавычек).

(unset -v IFS; set -f; grep -i -- foo $(cat files.txt))

при условии, что файлы разделены космосом, табуляцией или новой строкой (нет пути избежать их, хотя можно выбрать другой разделитель, присвоив его IFS ). Если список файлов слишком велик в большинстве систем, то это приведет к сбою.

Предполагается, что ни один из файлов не называется - .

8
27.01.2020, 19:50

XARGS может читать элементы из файла (например, ваш список файлов.txt с его опцией:

   --arg-file=file
   -a file
          Read items from file instead of standard input.  If you use this
          option, stdin remains unchanged when commands are  run.   Other‐
          wise, stdin is redirected from /dev/null.

Так что это должно работать тоже:

xargs -a files.txt grep -i 'foo'

или для пробелов в имена файлов

xargs -d'\n' -a files.txt grep -i 'foo'
xargs -I{} -a files.txt grep -i 'foo' {}
3
27.01.2020, 19:50

Посмотрите на http://mirror.centos.org/centos/6/os/x86_64/Packages/ , и вы узнаете, что можно установить (если вы, конечно, не добавили больше репозиториев).

Теперь

  • java-1.7.0-openjdk.x86 _ 64 - это пакет, содержащий JRE

  • java-1.7.0-openjdk-devel , содержащий материал для разработки (в основном, это не нужно, если вы хотите запустить Java приложений).

  • java-1.7.0 может быть метапакетом (это мое предположение, по крайней мере), который тянет в первый и, вероятно, некоторые другие вещи, которые часто используются вместе с ним. Это обычно способ убедиться, что пользователи получают то, что они обычно хотят, если единственное, что они знают, это то, что они хотят «установить Java 7».

-121--133694-

Похоже, вы пополняете список имен файлов, а не сами файлы. < (cat files.txt) просто перечисляет файлы. Попробуйте < (cat $ (cat files.txt)) фактически объединить их и выполнить их поиск в виде одного потока, или

grep -i 'foo' $(cat files.txt)

, чтобы передать все файлы.

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

while read filename; do grep -Hi 'foo' "$filename"; done < files.txt
-121--29679-

Для чтения списка имен файлов из stdin можно использовать xargs . Например,

cat files.txt | xargs -d'\n' grep -i -- 'foo'

По умолчанию xargs считывает предметы из стандартного ввода, разделенного пробелами. -d '\n ' сообщает ему использовать новую строку в качестве разделителя аргументов, чтобы он мог обрабатывать имена файлов, содержащие пробелы. (Как указывает Стефан Шазелас, это расширение GNU). Однако он не справится с именами файлов, содержащих новые строки; Нам нужен более сложный подход, чтобы справиться с этим.

FWIW, этот подход несколько быстрее, чем во время цикла чтения , так как команда bash read очень медленная - она считывает свои данные по символам, в то время как xargs считывает свои входные данные более эффективно. Кроме того, xargs вызывает команду grep столько раз, сколько требуется, причем каждый вызов получает несколько имен файлов, и это более эффективно, чем вызов grep отдельно для каждого имени файла.

Для получения дополнительной информации см. справочную страницу xargs и информационную страницу xargs.

7
27.01.2020, 19:50

Теги

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