Для удаления LXD PPA требуется lxd.migrate, но как насчет моего сетевого моста и пула ZFS?

Золотое правило регулярных выражений «меньше». Вы всегда должны пытаться написать простейшее регулярное выражение, соответствующее вашим данным. Это не только упрощает чтение и понимание, но и гораздо более надежное и не прерывается с небольшими изменениями в формате. Итак, в вашем случае вы можете просто сделать:

$ sed -r 's/(.*), ([^,]+,[^,]+,[^,]*$)/\2\1/' file 
Friday, Mar 13,2015 16:59:42blah, blah, blah, 
Friday, Mar 13,2015 16:51:11yadi, yadi, yada, 

Это соответствует всем значениям от начала строки до запятой и пробелом ((.*),) и, поскольку шаблон окружен круглыми скобками, сохраняет его как \1. Теперь, поскольку вторая захваченная группа (второй шаблон в круглых скобках) подходит к концу строки (это означает $), мы знаем, что мы соответствуем правой части в первом.

Второй ищет растягивание одного или нескольких символов без запятой ([^,]+), запятой, другим набором не запятых, другой запятой, а затем как можно большим количеством символов не запятой до тех пор, пока конец линии. Таким образом, мы можем корректно идентифицировать последние поля как дату. [F8] - это оператор подстановки, который здесь просто переключает порядок 1-го и 2-го захваченных паттернов.

Вы также можете сделать то же самое в awk. Предположительно, текст до даты является переменным, поэтому мы не можем принимать одинаковое количество полей для каждой строки. Поэтому нам нужно будет считать поля назад от конца строки:

$ awk -F, '{ 
            printf "%s,%s,%s, ", $(NF-2),$(NF-1),$NF; 
            for(i=1;i<NF-3;i++){printf "%s,", $i} print $(NF-3)
         }' file 
 Friday, Mar 13,2015 16:59:42, blah, blah, blah
 Friday, Mar 13,2015 16:51:11, yadi, yadi, yada

Или в Perl:

$ perl -lpe 's/(.*), ([^,]+,[^,]+,[^,]*$)/\2, \1/' file 
Friday, Mar 13,2015 16:59:42, blah, blah, blah
Friday, Mar 13,2015 16:51:11, yadi, yadi, yada

$ perl -F, -lane 'print join ",",@F[$#F-2,$#F-1,$#F,0..$#F-3]' file 
 Friday, Mar 13,2015 16:59:42,blah, blah, blah
 Friday, Mar 13,2015 16:51:11,yadi, yadi, yada
1
задан 6 January 2018 в 06:16

0 ответов

Другие вопросы по тегам:

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