Имам файл, съдържащ (по един на ред). Бих искал да извадя дума между цитати, като се започне с някакъв модел. (в моя случай е 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