Используя bash (bash awk, sed), прочитайте файл и извлеките префикс соответствия слов между кавычками - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть файл, содержащий (по одному в строке).Я хотел бы извлечь слово между кавычками, начиная с некоторого шаблона.(в моем случае это C _)

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

и я хочу извлечь: PATTERNabcde PATTERNabc

РЕДАКТИРОВАТЬ:
Я хотел быТАКЖЕ извлечь слово между кавычками, которые не начинаются с $PATTERN.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

Вы можете использовать grep как:

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

Смотри

2 голосов
/ 15 декабря 2010

Вы можете использовать awk:

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

Это работает, если в кавычках заключено только одно слово или если первое, которое может начинаться с шаблона, всегда первое;в противном случае вы должны будете использовать цикл for:

awk -F\" '{for (i=2;i<=NF;i+=2) if ($i ~/^[[:space:]]*PATTERN/ ) {print $i;next}}'
2 голосов
/ 15 декабря 2010
sed -rn 's/.*?".*?(PATTERN[^"]*)".*/\1/p'
  • -r - расширенное регулярное выражение
  • -n - отключена автоматическая печать
  • .*? - ноль или более символов, не жадные
  • ( - открыть группу захвата
  • [^"] - любой символ, кроме "
  • ) - закрыть группу захвата
  • \1 - первыйсоответствующая группа
  • p - print

Мы просто заменяем каждую строку первой группой.Если есть замена, мы печатаем.

...