Справка по сценарию Bash -Синтаксический анализ и вывод текста

Недавно у меня была такая же проблема с флешкой.

Что я сделал, кроме проверки разрешения и т. д.

  1. lsusb Это находит устройство с идентификатором поставщика и идентификатором продукта для использования в,
  2. usb _переключатель режимов с опцией -d.

Это сработало для меня без чего-то столь же экстремального -форматирования диска.

-3
18.08.2020, 21:49
3 ответа

grepработает так, как должно в режиме по умолчанию. Со страницы man:

...grep searches for PATTERNS in each FILE. PATTERNS is one or more patterns separated by newline characters, and grep prints each line that matches a pattern...

Таким образом, должно появиться строк в тексте, соответствующем regex. Линии разграничены управляющим кодом newline, который объясняет поведение, которое вы видите. Кроме использования опции -z, упомянутой в ответах. Предполагая, что «проблема» — это регулярное выражение, которому вы хотите сопоставить (, замените на 'Device Degraded'или '\sDegraded'или '\sError', если это то, что вы действительно хотите сопоставить ); и что столбец «Корректирующее действие» генерируется машиной и согласован, т. Е. Всегда занимает 4 строки, вы также можете просто запустить grep -A 3 '\sissue' > issues, чтобы сохранить только те строки, которые вас интересуют , в файл. Вы должны иметь возможность генерировать вывод, который выглядит как:

1  ok device issue  Some Action which 
                        has to be taken which 
                        is split into many lines 
                        under d.
--
10  ok device issue Some Action which
            has to be taken which 
            is split into may lines
            under d. 
--
211 ok device issue Some Action which
            has to be taken which 
            is split into many lines 
            under d.

проверьте справочную страницу grep, чтобы узнать больше о том, что делают эти опции.

0
18.03.2021, 23:13

Здесь вам понадобится многострочный поиск. Для чего нам понадобится включенный PCRE -Pвариант. Поскольку grep будет выводить записи с разделителями Null в режиме slurp -z, мы удаляем их с помощью команды tr.

$ < file grep -Pzo '.*\S.*issue.*\n(?:\h+.*\n)+'  | tr -d '\0'
1
18.03.2021, 23:13

Предполагая, что «запись» во входном файле точно соответствует ОП:

$ sed '/issue/!d; :a; n; /^[0-9]\{1,\} /d; $!ba' file
1  ok device issue   Some Action which 
                     has to be taken which 
                     is split into many lines
                     under d.
$
0
18.03.2021, 23:13

Теги

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