Давайте рассмотрим, что у нас есть следующая строка в текстовом файле:

...
2018-09-13    5555    33-33    Some_string
...

Мне нужно изменить первый столбец (дата как yyyy-mm-dd) на другой формат (dd.mm , год сброса), не касаясь других столбцов:

...
13.09    5555    33-33    Some_string
...

Как я могу сделать это программно, используя awk (или sed и т.д.)?

1 ответ1

2

Возможное решение

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .