Я гонялся за этой же ошибкой и оказалось, что флешка, которую я использовал, была неисправна. Я узнал об этом, запустив немедленную проверку после его создания. Вот пример того, как будет выглядеть успешная проверка:
# 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-накопителе после пары сотен блоков я получил ошибку ввода-вывода при чтении, хотя он только что был записан без ошибок.
Чтобы подсчитать, сколько раз подстрока встречается в файле:
#!/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
.