/ / Използване на bash (bash awk, sed) чете файл и извлича думата съвпадаща префикс между цитати - bash, scripting, sed, awk, grep

Използването на bash (bash awk, sed) чете файл и извлича думата съвпадаща префикс между котировки - bash, scripting, sed, awk, grep

Имам файл, съдържащ (по един на ред). Бих искал да извадя дума между цитати, като се започне с някакъв модел. (в моя случай е C_)

"PATTERNabcde"  sdfds  sdfds
"sdfsdfsdf"   sdfdsf sdfdsf
" PATTERNabc"          dfdsdfd

и искам да извлека: PATTERNabcde PATTERNabc

РЕДАКТИРАНЕ:
Бих искал също така да извадя дума между цитати, които не започват с $PATTERN.

Отговори:

2 за отговор № 1

Можете да използвате awk:

awk -F" "$2~/^[[:space:]]*PATTERN/{print $2}" file

Това работи, ако има само една дума, затворена в кавички или ако тази, която може да започне с шаблона, винаги е първата; в противен случай, трябва да използвате за цикъл:

awk -F" "{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}"

2 за отговор № 2
sed -rn "s/.*?".*?(PATTERN[^"]*)".*/1/p"
  • -r разширен рег
  • -n - Автоматично отпечатване с увреждания
  • .*? - нула или повече знаци, без алчни
  • ( отворена група за залавяне
  • [^"] - всеки знак, но "
  • ) - близка група за залавяне
  • 1 - първата съвпадаща група
  • p - печат

Просто заместваме всеки ред с първата група. Ако има замяна, ще отпечатаме.


2 за отговор № 3

Можеш да използваш grep като:

grep -Po "(?<=")s*PATTERN[^"]*(?=")" file

Виж го