Выделить все экземпляры цитируемого текста из файла

271
SaltyNuts

Есть ли какой-либо способ grepили каким-либо другим способом получить все экземпляры текста в каждой паре двойных кавычек в файле? Я видел такие ответы: https://stackoverflow.com/questions/15435056/grep-string-inside-double-quotes, но они не работают в тех случаях, когда каждая строка может содержать произвольное количество строк в кавычках.

Так что для ввода, как это:

Here was some "text over here", and then there was "text over there". 

Я хотел бы, чтобы результат был:

"text over here" "text over there" 

Не нужно включать сами цитаты.

1

2 ответа на вопрос

3
barlop
$ cat aaaa foo "bar" base "ere" fff "fff"ggggg"rr" $ grep -o '"[^"]*"' aaaa "bar" "ere" "fff" "rr" 
Эта команда прекрасно работает без `P`. Scott 8 лет назад 1
@ Скотт хорошо ... хотя -P обычно очень полезен, потому что без -P функции регулярных выражений немного примитивны. Например, `echo 1111 | grep -o 1 `все, что запрашивается, это чтобы '1' встречался дважды, но без P или или не будут работать. barlop 8 лет назад 0
1
pfnuesel

Try:

grep -o '"[^"]*"' /path/to/file 

Note: [^"]* is the non-greedy version of the wildcard (.*), so you can match more than one occurrence per line.

Это будет соответствовать более чем одному вхождению, хотя, поскольку вы используете термин «не жадная версия», я хотел бы указать вам, что звезда все еще жадная. Если бы вы хотели то, что вы называете не жадным. То, как вы делаете это, то, что вы называете «не жадным», то есть ленивым, было бы `*?` Например `. *?` Я сомневаюсь, что `[^ *] *` будет называться не жадный, хотя, возможно, можно сказать, что он менее жадный, чем `". * "` (если терминология действительно используется таким образом). Но, конечно, насколько терминология идет. * жадный и *? ленивый barlop 8 лет назад 2
Я эгоистично предпочитаю это из-за отсутствия опции `-P` (не поддерживается в некоторых системах), хотя, конечно,` text` был просто примером, но это можно исправить, просто удалив чертову строку `text` из команда. SaltyNuts 8 лет назад 1

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