Команда s/->.*/^/g
сопоставляет первую ->
и остальную часть строки и заменяет совпадение на ^
. Флаг g
здесь избыточен.
Поскольку в вашей строке есть только один ->
, с awk
это становится намного проще:
awk -F'->' '{print $2" "$1}' file
awk -F'[[:space:]]*->[[:space:]]*' '{print $2" "$1}' file
-F'->'
устанавливает разделитель полей на ->
([[:space:]]*->[[:space:]]*
будет включать любые пробелы до и после него), и вам нужно будет распечатать два значения поля в обратном порядке.
С sed
вы можете рассмотреть решение вроде
sed 's/\(.*\) -> \(.*\)/\2 \1/' file
Здесь \(.*\) -> \(.*\)
будет соответствовать и захватывать любое количество символов до ->
в Группу 1, тогда ->
будет соответствовать ->
, а последний \(.*\)
будет соответствовать и захватите любое количество символов в группу 2. Замена \2 \1
поменяет местами значения двух групп.