Страница 1 из 1

Замена подстроки в sed по регулярке.

Добавлено: 01 дек 2021, 13:00
Chocobo
Дано, текстовый файл в формате последовательности полей
{размер кб}{пробел}{сумма md5}{два пробела}{абсолютный путь}
типа такого:

Код: Выделить всё

2048 5ff7622fccf79045c38273d506fc32b7  /tmp/dir1/somefile1.pdf
168 7fd0b7cf1740dbe974f3d8c0686679bf  /tmp/other file #1.pdf
0 d41d8cd98f00b204e9800998ecf8427e  /tmp/dir2/dir3/all/783/Документ.docx
В целом структура попадает под паттерн [0-9]{1,}\ [a-f0-9]{32}\ \ /tmp/.*

задача собрать из этого списка валидный csv вставив пару разделителей (например (|)) между полями.

Код: Выделить всё

2048|5ff7622fccf79045c38273d506fc32b7|/tmp/dir1/somefile1.pdf
168|7fd0b7cf1740dbe974f3d8c0686679bf|/tmp/other file #1.pdf
0|d41d8cd98f00b204e9800998ecf8427e|/tmp/dir2/dir3/all/783/Документ.docx
Осложняется тем, что имя файла также может содержать пробелы и менять их не нужно.



Как бы сказать sed'у заменить символы между полями не обращая внимания на них в путях? :scratch:

замена подстроки в sed по регулярке.

Добавлено: 01 дек 2021, 13:26
rogoznik
Chocobo, как-то так

Код: Выделить всё

sed -i 's/\([0-9]\{1,\}\)\ \([a-f0-9]\{32\}\)\ \ \(.*\)/\1,\2,\3/' test.txt
Chocobo писал(а):
01 дек 2021, 13:00
168 7fd0b7cf1740dbe974f3d8c0686679bf /tmp/other file #1.pdf
только у тебя тут во втором случае 3 пробела

Замена подстроки в sed по регулярке.

Добавлено: 01 дек 2021, 13:36
Chocobo
rogoznik, Ага, прекрасно) это мне и было интересно как выглядит подстановка. Спасибо! :thumbs:

Сам сформировал пока авком, но оно покатит только если пробелов меньше чем их напишем на вывод, что менее универсально)
awk '{print $1 "|" $2 "|" $3 " " $4 " " $5 " " $6}'

сказать ему "с третьего поля и до финала" пока не вышло, циклом с NF обрубает строку