grep пары шаблонов и файл

Ваш вопрос не совсем ясен, однако для решения проблем с GRUB вы можете загрузить ISO-образ загрузочного -восстановить -диск , записать его на компакт-диск -ROM или USB-накопитель, затем загрузитесь с этого устройства. Затем следуйте инструкциям.

4
01.10.2019, 13:51
3 ответа

Использованиеbash:

#!/bin/bash

files=( 'file 1.txt' 'file 2.txt' 'file 3.txt' )

while IFS= read -r pattern; do
    grep -e "$pattern" "${files[0]}"
    files=( "${files[@]:1}" )
done <search.patterns

Проверка:

$ bash script.sh
home 3
dog 1
cat 4

Сценарий сохраняет соответствующие имена файлов в массиве files, а затем переходит к чтению шаблонов из файла search.patterns. Для каждого шаблона запрашивается первый файл в списке files. Затем обработанный файл удаляется из списка files(, что дает новое первое имя файла в списке ).

Если количество паттернов превышает количество файлов в files, будут ошибки из grep.

5
27.01.2020, 20:46

С помощью GNU awk(gawk)вы можете использовать правило BEGINFILEдля чтения нового шаблона при каждом изменении входного файла:

$ gawk 'BEGINFILE{getline pat < "search.patterns"} $0 ~ pat' file\ {1..3}.txt
home 3
dog 1
cat 4

Вы действительно должны проверить, что getlineвозвращает новый шаблон, например

gawk '
  BEGINFILE {
    if((getline pat < "search.patterns") <= 0) {
      print "Error reading pattern" > "/dev/stderr"
      exit 1
    }
  } 
  $0 ~ pat
' file\ {1..3}.txt

Обратите внимание, что шаблоны awkявляются расширенными регулярными выражениями, подобными тем, которые поддерживаются grepс опцией -E.

Вы можете добиться того же в не -GNU awk, передав search.patternsв качестве первого файла и используя соответственно NRи FNRлибо для чтения шаблонов в индексированном массиве, либо для поиска следующий шаблон в массиве.

6
27.01.2020, 20:46

Вы можете использовать pasteдля сопоставления шаблона с файлом:

paste <(printf "%s\n" *.txt) search.patterns | while IFS=$'\t' read -r file pattern; do
    grep -- "$pattern" "$file"
done

Я предполагаю, что имена файлов не содержат табуляции.

3
27.01.2020, 20:46

Теги

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