LINUX.ORG.RU

Получить значение с помощью awk и регулярного выражения

 ,


1

1

Всем привет.

Помогите составить команду. Есть файл со строками в виде:

param1;param2;random text name="param3" random text

Необходимо найти в строке значение param3 в ключе name= с помощью регулярного выражения, которое может и отсутствовать и вывести в виде:

param1;param2;param3

random text - может быть любой длины

Заранее спасибо!

чёт не нахожу аналога 'grep -o' или capturing group в awk.

может ну его нафиг этот awk, дававй на sed сделаем?

anonymous ()
Ответ на: комментарий от vodz

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

anonymous ()
awk '{match($3, /name=(.*)/, a); gsub(/"/, "", a[1]); split($1, b, ";"); OFS=";"; print (b[1],b[2],a[1])}'

match - разбирает на группы, в данном случае будет 1 группа a[1]

gsub - замена, в данном случае удаляет кавычки

split - разбиение по разделителю

CaHbl4 ()

Вариант с магическими числами (первое, что в голову пришло):

gawk -F\; 'match($0, /name=".*"/) { print $1 ";" $2 ";" substr($0, RSTART+6, RLENGTH-7) }'
rassol ()
Ответ на: комментарий от CaHbl4

match($3, /name=(.*)/, a)

прикольно, в мане про это ничего нет :( и лучше так, новерно: match($0, /name="([^"]*)"/, a), чтобы не жадничать и без gsub.

anonymous ()
Ответ на: комментарий от CaHbl4

ага. надо было просто man gawk писать, а не awk. лул.

спасибо за наводку.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.