Поиск строки, содержащей имя файла

Easy2Boot поддерживает постоянство для нескольких ISO. Примеры можно найти в папке _ISO \ docs \ Sample mnu files. Вы можете иметь много ISO-файлов с постоянным хранением на одном USB-накопителе. Посмотрите на веб-сайт www.easy2boot.com и www. Веб-сайт .rmprepusb.com. http://www.easy2boot.com/add-payload-files/persistence/

4
07.03.2019, 16:26
2 ответа

Необходимо выполнить grep для каждого найденного файла.

-lуказывает grepпечатать имя файла только тогда, когда regexнайден.

Если имена файлов не содержат символов /, попробуйте это:

find a_directory -type f -name \*.py.txt -exec sh -c '
  for fname; do
    basename="${fname##*/}"
    grep -lF "@code prefix.${basename%.*}" "${fname}"
  done' sh {} +

см. man bashдля пунктов ниже:

  • "${fname##*/}"равно file1.py.txt, если fname==a_directory/file1.py.txt
  • "${basename%.*}"равно file1.py, если basename==file1.py.txt
3
27.01.2020, 20:47

С GNUawk:

gawk '
  BEGINFILE{search = "@code prefix." substr(FILENAME, 3, length(FILENAME) - 6)}
  index($0, search)'./*.py.txt

Сообщит о совпадающих строках.

Чтобы напечатать имя файла и соответствующую строку, измените index($0, search)на

.
  index($0, search) {print FILENAME": "$0}

Или для печати только имени файла:

  index($0, search) {print FILENAME; nextfile}

Замените FILENAMEна substr(FILENAME, 3), чтобы пропустить вывод префикса ./.

Список файлов лексически отсортирован. Те, чье имя начинается с ., игнорируются, (некоторые оболочки имеют опцию dotglob, чтобы добавить их обратно; с zshвы также можете использовать квалификатор (D)glob ).

8
27.01.2020, 20:47

Теги

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