Чтобы получить что-то вроде grep | cut
, вы можете использовать sed -n s/A/B/p
.
По умолчанию sed
печатает каждую строку после обработки всех команд. Вы можете отключить весь вывод, который вы явно не печатаете из команды, с помощью sed -n
.
Команда s
принимает форму s/$FIND/$REPLACE/$FLAGS
. В частности, флаг p
печатает строку всякий раз, когда производится замена.
В сочетании с ними вы можете легко совмещать и резать:
sed -nE "s/email2 = (.+)/\1/p" < /etc/emails.conf
На самом деле, это более мощное средство, чем grep | cut
, потому что вы можете использовать произвольный шаблон замены.
(Параметр -E
включает современное регулярное выражение, которое позволяет ссылаться на группы захвата в шаблоне замены. Для простого кроя вы можете обойтись без него, используя более умные узоры.)
Я предполагаю, что вы хотите перенести разницу между двумя системами, и именно поэтому вы не можете перебазировать свои образы QCOW в общий корень.
Инструмент rsync
позволит вам создать двоичную разницу. Вот рабочий пример с (файлами значительно )меньшего размера
ls -l ?.qcow2
-rwxrwx--- 1 root root 76993536 Jan 2 2020 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2
По вашему вопросу нам нужно получить различия от b.qcow2
до a.qcow2
. Обратите внимание, что при условии, что rsync
может получить доступ как к источнику, так и к месту назначения, нет необходимости, чтобы они находились на одном сервере
rsync -av --only-write-batch b_to_a.rsyncdiff b.qcow2 a.qcow2
Это определяет разницу и записывает ее в b_to_a.rsyncdiff
, а также попутно создает вспомогательный шелл-скрипт
ls -l b_to_a*
-rw------- 1 root root 35617731 Oct 26 09:26 b_to_a.rsyncdiff
-rwx------ 1 root root 54 Oct 26 09:26 b_to_a.rsyncdiff.sh
cat b_to_a.rsyncdiff.sh
rsync -av --read-batch b_to_a.rsyncdiff ${1:-a.qcow2}
Чтобы применить изменение, вам просто нужен исходный код a.qcow2
и разница
rsync -av --read-batch b_to_a.rsyncdiff a.qcow2
receiving incremental file list
b.qcow2
sent 61,509 bytes received 35,621,188 bytes 71,365,394.00 bytes/sec
total size is 77,337,600 speedup is 2.17
Результат
ls -l ?.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2