Возможное решение
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