Как сделать Grep не -жадным

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

 # sha256sum CentOS-7-x86_64-DVD-1804.iso
 506e4e06abf778c3435b4e5745df13e79ebfc86565d7ea1e128067ef6b5a6345  CentOS-7-x86_64-DVD-1804.iso

 # dd if=CentOS-7-x86_64-DVD-1804.iso bs=1024k of=/dev/sdz oflag=sync
 4263+0 records in
 4263+0 records out
 4470079488 bytes (4.5 GB) copied, 1022.82 s, 4.37 MB/s

 # dd if=/dev/sdz bs=1024k count=4263 | sha256sum
 506e4e06abf778c3435b4e5745df13e79ebfc86565d7ea1e128067ef6b5a6345  -

Поскольку размер USB-устройства может быть немного больше исходного ISO-образа, важно ограничить объем считываемых данных теми же данными, которые были записаны. ("количество=")

На моем сломанном USB-накопителе после пары сотен блоков я получил ошибку ввода-вывода при чтении, хотя он только что был записан без ошибок.

0
11.06.2021, 22:58
2 ответа

Чтобы подсчитать, сколько раз подстрока встречается в файле:

#!/bin/sh

grep -F -o -e "$1" | wc -l

Вы можете использовать этот скрипт так:

$./script e <script
       2
$./script ' -' <script
       4
$./script hey <file1
       3
$./script he <file1
       4
$ df |./script %
       7

Здесь я считаю количество eсимволов в самом скрипте,а затем количество раз, когда подстрока, состоящая из пробела и тире, встречается в скрипте. Затем я считаю пару подстрок в файле, представленном в вопросе. Последний пример подсчитывает количество знаков процента в выводе dfв моей системе.

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

Сценарий состоит из одного конвейера grep+ wc. Он использует не -стандартную (, но часто реализуемую опцию)-oдля возврата списка не-перекрывающихся совпадений в отдельных строках. Затем эти строки подсчитываются с помощью wc -l.

Вызов grepиспользует -F, чтобы шаблон интерпретировался как строка, а не как регулярное выражение. Это позволяет подсчитывать количество раз, например. *происходит в файле, без экранирования*(вам все равно придется заключать в кавычки *, чтобы оболочка не использовала его в качестве шаблона подстановки, хотя ). Не указывайте -F, если хотите использовать шаблон как регулярное выражение.

Опция -eиспользуется для указания grep, что $1является шаблоном. Если -eне используется, шаблон, подобный --version, будет интерпретироваться как вариант grep.

1
28.07.2021, 11:25

Некоторые версии grep(, например. GNU )позволяет вам давать Perl-совместимые RE (проверить PCRE ), они гораздо более гибкие, чем стандартные регулярные выражения POSIX.

0
28.07.2021, 11:25

Теги

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