Возможное решение
sed 's/^....-\(..\)-\(..\)/\2.\1/'
Эти несколько точек не могут быть элегантными; команда не заботится, имеет ли она дело с числами; ему все равно, есть ли что-то еще в первой "колонке". Эти проблемы могут быть исправлены с помощью более сложного подхода, но в его нынешнем виде команда довольно проста.
Общая команда sed 's/A/B/'
заменяет шаблон A
на B
, самое большее один раз на строку.
Где A
в этом случае состоит из:
^
- начало маркера строки,
....
- ровно четыре символа,
-
- буквально -
,
(..)
- ровно два символа, на которые ссылается позже \1
,
-
- буквально -
,
(..)
- ровно два символа, на которые ссылается позже \2
.
И B
\2
- что бы ни было во втором ()
в A
,
.
Буквальный .
,
\1
- что бы ни было в первом ()
в A
Дополнительно (
и )
экранируются \
.
Для обработки файла добавьте его в качестве последнего аргумента. Для обработки файла на месте используйте -i
, например
sed -i 's/^....-\(..\)-\(..\)/\2.\1/' myfile.txt