sed изменяет только первый столбец в файле, но не первое вхождение, если оно совпадает - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу обновить только первый столбец в файле, но не первое вхождение.ниже приведен код, который я в настоящее время использую для обновления первого вхождения.

Чтобы изменить первое вхождение даты

sed 's/\(....\)-\(..\)-\(..\)/\2\/\3\/\1/'

У меня возникают некоторые проблемы, например, иногда дата указана справаформат, который находится в первом столбце, поэтому приведенный выше код изменяет дату в третьем или четвертом столбце, поскольку это первое вхождение.что я не хочу

ниже - это то, что я делаю:

2018-09-14^Aaaa^Aq^ATEST^Abc^2018-09-14^A1^2018-09-14

sed 's/\(....\)-\(..\)-\(..\)/\2\/\3\/\1/' 

2018/14/09^Aaaa^Aq^ATEST^Abc^2018-09-14^A1^2018-09-14

Некоторые строки в моем файле имеют правильный формат, а некоторые нет.Поэтому я хочу изменить только первый столбец в файле, если он не соответствует формату "гггг / мм / дд", и игнорировать, если он уже находится в формате "гггг / мм / дд".

Вывод я хочу

$cat test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
2018-09-14^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
To
$ cat output_test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

С GNU или OSX / BSD sed для -E для включения ERE:

$ sed -E 's:^([^-]+)-([^-]+)-([^^]+):\1/\3/\2:' test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018/14/09^A1^2018-09-14
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
1 голос
/ 04 апреля 2019

С GNU sed:

$cat test.csv |sed -E 's/^(\w+)-(\w\w)-(\w\w)/\1\/\3\/\2/'

затем для реального редактирования:

$ sed -i -E 's/^(\w+)-(\w\w)-(\w\w)/\1\/\3\/\2/' test.csv >output_test.csv
0 голосов
/ 04 апреля 2019

Добавьте шаблон начала с (^) для соответствия:

sed 's/^\(....\)-\(..\)-\(..\)/\1\/\3\/\2/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...