Как считать текстовый файл линию за линией, который не является постоянным в сценариях оболочки

Правило udev создает символьную ссылку на blockdevice (SUBSUSTEM=="block") с информацией 8,1 (ENV{MAJOR}=="8", ENV{MINOR}=="1" Первый раздел на первом диске) в Вашей установке. Ссылку называют/dev/root с SYMLINK+="root", знак "плюс" говорит, что udev не должен перезаписывать предыдущие ссылки, созданные к этому устройству, а скорее добавлять еще одну ссылку к нему.

Другое правило как найденный в некоторой форме во многих системах Linux является этим:

SUBSYSTEM=="block", ENV{ID_SERIAL}=="DVD_Drive_USB2_10000E0008441C1E", SYMLINK+="cdrom"

Это говорит, что blockdevice с serialnumber DVD_Drive_USB2_10000E0008441C1E должен быть symlinked к/dev/cdrom

Я не совсем уверен, почему rkhunter жалуется на это, но это происходит правильно из-за типа/dev/.udev/rules.d/root.rules, не являющегося устройством или символьной ссылкой, а скорее файлом. Я не думаю, что это опасно.

3
24.07.2014, 16:08
3 ответа

На основании ваших пояснений в различных комментариях, кажется, что вам следует использовать опцию grep -f для чтения списка шаблонов непосредственно из файла

   -f FILE, --file=FILE
          Obtain  patterns  from  FILE,  one  per  line.   The  empty file
          contains zero patterns, and therefore matches nothing.   (-f  is
          specified by POSIX.)

Вы можете добавить -F для принудительной интерпретации в виде буквенных ('фиксированных') строк, если только файл не содержит шаблонов регулярных выражений i. e.

grep -Ff file_of_lines file_to_search_for_those_lines

Результатом будет список всех строк в file_to_search_for_those_lines, которые соответствуют любой из строк в file_of_lines.

.
1
27.01.2020, 21:23

Для чтения файла строка за строкой можно использовать команду read. Например:

while read -r line
 do 
 [[ $line = 'syntax error at or near "?" at character 1' ]] &&  printf '%s\n' "$line"
 done < file1.txt
1
27.01.2020, 21:23

Если я вас правильно понял, вы хотите, чтобы grep работал только со строками с 1 по n . Для этой цели вы можете использовать инструмент head :

head -n 20 your_file | grep ...

Это заставит grep работать с первыми 20 строками your_file . Замените 20 релевантным для вас n .

Альтернативная интерпретация и ответ

Мне только что пришло в голову, что вы можете иметь в виду, что file1.txt содержит шаблоны, которые хотели бы попытаться сопоставить с grep . Если , что - это так, вам нужен параметр -f для grep :

grep -f file1.txt files_you_want_to_search

Параметр -f сообщает grep , чтобы получить его шаблоны из file1.txt , где он предполагает один шаблон на строку (как вы показываете в своем сообщении). В таких случаях вы также можете добавить параметр -F , чтобы гарантировать, что любые метасимволы регулярных выражений в файле не имеют особого значения, а интерпретируются буквально:

grep -Ff file1.txt files_you_want_to_search
1
27.01.2020, 21:23

Теги

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