Классический метод резервного копирования - использовать такие инструменты, как tar и dump для резервного копирования файлов, обычно с частыми инкрементными резервными копиями. Как вы уже упоминали, это была Windows, которая популяризировала резервные копии типа изображения, так как не хватало возможности резервного копирования файлов, которые были в использовании. Резервное копирование на уровне файлов позволяет выполнять инкрементное резервное копирование и восстановление. С резервными копиями изображений это вообще или ничего. При восстановлении обычных резервных копий вы можете восстановить другой тип файловой системы, а всякая фрагментация в старой файловой системе оставлена позади. Резервные копии изображений вернули все, как было. После восстановления обычной резервной копии вам нужно переустановить загрузчик вручную, но с резервными копиями изображений это простой процесс.
Если вы собираетесь делать резервное копирование изображения, вы хотите использовать умнее такие как partclone или ghost4linux, а не dd, который не различает используемые и свободные части файловой системы. Пропуск свободных частей позволяет значительно уменьшить изображение и ускорить время резервного копирования / восстановления. Другим ограничением резервных копий изображений является то, что они не могут быть восстановлены на меньшем диске / разделе, чем оригинал, даже если это было в основном свободное пространство.
[1-12]\/[0-31] и [0-99] не означают от 1 до 12, от 0 до 31 и от 0 до 99.
[1-12] означает диапазон символов, начинающихся с 1 до 1, и 2. По существу: [12]. (Сравнить с [0-1a].) [F7] означает диапазон символов начиная с 0 до 3 и 1: [0123].Аналогично для [0-99]. Выразить диапазон чисел с помощью регулярных выражений непросто.
Если числа не используют двойные цифры (01/06/33), вам нужно будет сделать что-то вроде: [0-9]{1,2} для дня и месяц и [0-9]{2} за год, или регулярное выражение будет быстро расти громоздким. Это, конечно, рискует выделить что-то вроде 99/99/99.
Пример:
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/\111\/14\/46/g" <<<'muru/1/4/85'
muru/11/14/46
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/\111\/14\/46/g" <<<'muru/10/4/85'
muru/11/14/46
$ sed "s/^\(muru\/\)[0-9]\{1,2\}\/[0-9]\{1,2\}\/[0-9]\{2\}/\111\/14\/46/g" <<<'muru/10/28/85'
muru/11/14/46
Предполагаю, что вы хотите сохранить имя, поэтому я использовал обратные ссылки для ссылайтесь на него в подстановке (\1).
Даты сложны, но упрощаются в той же степени, что и ваша попытка ...
sed -r 's,^PersonsName1?[0-9]/[1-3]?[0-9]/[0-9]{2},11/14/46,' txt.file
Обратите внимание, что это соответствует чем-то вроде PersonsName11/11/11 и заменяет все, что было сделано в вашей попытке. Если вы хотите только заменить дату, вы можете использовать следующее.
sed -r 's,^(PersonsName)1?[0-9]/[1-3]?[0-9]/[0-9]{2},\111/14/46,' txt.file
Здесь мы фиксируем PersonsName, используя parens. Затем мы можем обратиться к нему снова в разделе замены с помощью \1.