sed -e1\!b -e:n -e"/^$/c$(printf '\\\n%%%s' \ ghi '')" -en\;bn
sed
понимает три примитива для записи сценариев с фиксированной строкой в стандартный вывод.Все три начинаются после следующей за ним новой строки с экранированной обратной косой чертой в сценарии и заканчиваются либо первой неэкранированной новой строкой в сценарии, либо первым встречающимся концом файла в сценарии:
i
i
n вставляет фиксированную строку в стандартный вывод прямо сейчас a
a
ppend в stdout в порядке появления сценария перед следующим циклом строки , или, для последней строки, в конце этой c
(1 (, 2)?)?
, заканчивает текущий цикл строки, и c
изменяет вывод на фиксированную строку для последнего из любого адреса [es] printf '\n\n\n\n\n' |
sed -e1\!b -e:n \
-e"/^$/c$(printf '\\\n%%%s' \ ghi '')" \
-en\;bn
% ghi %
Таким образом, этот сценарий b
выходит из сценария для каждой строки что есть !
не 1
st, но от первой строки до тех пор, пока она не сможет c
изменить пустую строку на фиксированную строку, он автоматически печатает каждую непустую строку перед перезаписью это с n
ext и возвращение к метке : n
ext, чтобы перейти снова.
Вы можете установить любые версии из исходников. Загрузите исходный код для любых версий Unison, которые вы хотите , с этой страницы , скомпилируйте и установите их по одной. Затем после каждой установки заходите в установочный каталог (, возможно /usr/bin/
), и копируйте только что установленный исполняемый файл unison
в unison-VERSIONNUMBER
или что-то в этом роде. И затем вы можете запустить любую версию Unison, которую хотите, просто указав номер версии.
Если вы хотите избежать установки Unison из исходного кода и вместо этого устанавливать разные версии через менеджер пакетов, тогда ваш вопрос больше касается вашего менеджера пакетов, чем Unison.