sed/awk для перемещения содержимого из строки в конец строки

Даже в качестве фиксированной строки 1.будет соответствовать 11.. Но это не строка, это регулярное выражение, поэтому к определенным символам применяются правила, а не литералы соответствия.

Точка является заменой -для " любого символа "; чтобы соответствовать буквальной точке, вам нужно экранировать ее как \.. Вы также можете включить маркер для начала -строки -(символ вставки ^), чтобы 1.совпадал только в начале строки.

Вы также можете отказаться от cat, потому чтоgrep(и многие другие команды )напрямую принимают имя файла.

Затем вы получите что-то вроде этого

grep '^1\.' test

который в вашем наборе данных соответствует только одной строке

1. Lil Nas X Ft, Billy Ray Cyrus - Old Town Road (Remix).mp3
1
30.10.2020, 13:14
2 ответа

Использованиеsed:

sed -E 's/(.*):([^,]*\.jks)(,.*)/\1\3, \2/' infile

Все, что находится внутри (...), известно как захваченная группа, и они берут обратную -ссылку, например \1для первой группы, \2для второй,... (только до максимума \9).

:соответствует буквальному:
[^,]*соответствует любому символу, кроме запятой;
\.jksсоответствует буквальной точке ., за которой следуетjks

:[^,]*\.jks,соответствует двоеточию, за которым следует все, что заканчивается на .jksи запятая; мы хотим, чтобы эта часть ([^,]*\.jks)двигалась последней, поэтому мы окружили ее внутри (...); двоеточие :мы удалим, поэтому мы оставили его за пределами захваченных групп.

Внешние захваченные группы захватывают все (.*)вокруг захваченной группы; первый доступен с \1"(.*)", второй с \2"([^,]*\.jks)" и третий \3"(,.*)".

3
18.03.2021, 22:53

Протестировано в GNU awk.

  • split()сначала введите поле в массив a, а затем переназначьте $1значения a[1]и a[2]и создайте $5со значением a[3].
  • OFS как разделитель.
awk -F, '{split($1,a,":",sep);$1=a[1]sep[1]a[2];  $5=a[3]; print $0}' OFS=',' file
CN=blabla:client, 26-Oct-2019, server, hostname:/path/to/jks/file/,blablafile.jks
CN=blabla:client, 26-Oct-2019, server, hostname:/path/to/jks/file/,blablafile31242.jks
CN=blabla:client, 26-Oct-2019, server, hostname:/path/to/jks/file/,blablafile3222242.jks
1
18.03.2021, 22:53

Теги

Похожие вопросы