Один из способов сделать это:
sed 'h; s/.*>\(.*\)<.*/\1/; s/-/ /g; G; s/\(.*\)\n\(.*>\)\(.*\)\(<.*\)/\2\1\4/'
В многострочного скрипта будет:
h
s/.*>\(.*\)<.*/\1/
s/-/ /g
G
s/\(.*\)\n\(.*>\)\(.*\)\(<.*\)/\2\1\4/
Это общая закономерность, когда вы хотите сделать замену только для определенной части линии. Для этого используется трюм (h
, G
команд). В основном вы делаете копию строки (от шаблона ) в пространство для удержания. Затем выделите часть между '>' и '<' и замените '-' на ''. Затем используйте многострочную команду get G
, чтобы добавить пространство удержания в пространство шаблона. Между ними будет новый символ линии (команда G
- это многострочная команда). В последней строке мы просто перегруппируем две строки, используя группы и замещающие метасимволы \ N (где N - номер группы).
Что вы пробовали? Это работает? Если нет, то какой (неправильный) результат? –