Похоже, что grep — правильный инструмент для «поиска» строки. Осталось определить такую строку с помощью регулярного выражения. Первая проблема заключается в определении границ слова. Это не так просто, как «пробел», поскольку a book, a lamp
использует ,
в качестве разделителя слов, в той же концепции многие другие символы или даже начало или конец строки могут действовать как разделитель слов. В GNU grep есть несколько разделителей слов:
\<
начало слова. \>
конец слова. \b
граница слова. Все они предполагают, что слово представляет собой последовательность из [a-zA-Z0-9_]
символов. Если вас это устраивает, это регулярное выражение может работать:
grep -o '\<.\{64\}\>' file
Если бы вы могли использовать расширенное регулярное выражение, \
можно было бы уменьшить:
grep -oE '\<.{64}\>' file
Выбирает от «начала слова» (\<
), 64({64}
)символов(.
)до «конца слова»(\>
)и печатает только совпадающие(-o
)части.
Однако точка(.
)будет соответствовать любому символу , что может быть слишком много.
Если вы хотите быть более строгим при выборе (шестнадцатеричных цифр ), используйте:
grep -oE '\<[0-9a-fA-F]{64}\>' file
Это позволит использовать шестнадцатеричные цифры в нижнем регистре или в верхнем регистре. Но если вы действительно хотите быть строгим, так как некоторые не -символы ASCII могут быть включены, используйте:
LC_ALL=C grep -oE '\<[0-9a-fA-F]{64}\>' file
Некоторые реализации grep (как grep -P )не имеют «начала слова» или «конца слова» (, как \<
и \>
), но имеют «границу слова». "(как\b
):
grep -oP '\b[0-9a-fA-F]{64}\b' file
Некоторые языки принимают границы слов POSIX [[:<:]]
и [[:>:]]
, но не perl и только из PCRE 8.34 .
Отвечая на ваш первый вопрос, 40 МБ/с звучит как узкое место для USB 2.0. Pi 4 поддерживает USB 3, но убедитесь, что ваш жесткий диск и кабель имеют USB 3.
Обновлено информацией из комментариев:
Также обратите внимание, что ваш rsync
включает в себя 2-сторонний :внешний жесткий диск и где бы вы ни находились. Чтобы удалить вторую часть из уравнения, попробуйте dd
только для -эталонного тестирования жестких дисков:
sudo dd if=/dev/zero of=/mnt/usb_hdd/blob bs=16M count=100 status=progress oflag=direct
sudo dd if=/mnt/usb_hdd/blob of=/dev/null bs=16M count=100 status=progress
sudo dd if=/dev/sda of=/dev/null bs=16M count=100 status=progress iflag=direct