Предполагая, что в каждом файле всегда есть 2 поля и всегда в одном порядке. Вот один из способов сделать это с помощью sed:
#!/bin/sh
printf '%s\t%s\n' Colour Hight
sed '
/ *Colour: */ {
s///
h
n
}
/ *Hight: */ {
s///
G
s/\n/\t/g
}
' "$@"
В этом ответе используется удерживать пробел
функция sed для сохранения значений данных из одной строки в другую.
Мы используем группировку операторов с {
и }
. Все команды в группе применяются только к адресным линиям, в данном случае линиям, выбранным шаблонами / * Цвет * /
и / * Высота * /
.
В строках «Цвет» и «Высота» мы сначала удаляем текст, который был сопоставлен ( * Цвет *
или * Высшее *
) с помощью s ///
.
Затем в строке «Цвет» мы удерживаем h
оставшийся текст в удерживаемом пространстве
, а затем переходим к следующей строке ввода без печати ( n
).
В строке Hight мы получаем / добавляем G
содержимое удерживаемого пространства к пространству шаблонов, соединенное с новой строкой '\ n' sed
. Затем мы подставляем табуляцию \ t
для этой новой строки, и sed
выводит результат.
Этот ответ должен работать со всеми версиями sed
, будь то Linux, FreeBSD или OS X.
Ha complicado demasiado su mando. Suponiendo un sistema de archivos completo -, podría usar algo como
rsync -aHXA --delete /source/ /destination/
Sin embargo, si el sistema muere mientras la copia está en progreso, terminará con una copia mixta de archivos antiguos y nuevos. Si desea crear copias de seguridad, recomendaría una solución que se base en rsync
, como rsnapshot
.