2013-05-20 2 views
1

Я использую сценарий оболочки для чтения в файле, а затем выводя результат в grep и пытаюсь извлечь строку, содержащуюся между двумя кавычками (при этом исключая кавычки).Regex, чтобы соответствовать строке между кавычками

./readFile.sh | grep -e "[\^\"]*[\?\"]" 

Это возвращает все содержимое файла, которое я читаю.

Мой файл организован таким образом:

TITLE="foo" 
DATA="bar" 
SERVER="foo.bar.server" 

Я прочитал регулярок учебник здесь http://www.regular-expressions.info/lookaround.html и пытался использовать предпросмотр и назад ', как лучше всего, как я мог, но я не понимаю, что здесь не так.

ответ

7

проверить этот пример с grep с Двойник за

kent$ echo 'TITLE="foo" 
DATA="bar" 
SERVER="foo.bar.server"'|grep -Po '(?<=")[^"]*' 
foo 
bar 
foo.bar.server 

альтернатива grep -Po '"\K[^"]*'

+0

это работает, однако, я получаю две пустые строки между выходом каждой строки –

+0

является то, что выход из вашего 'readFi le.sh'? если он выглядит точно так же, как в ответе, нет пустых строк. – Kent

+0

Вы правы его readFile.sh –

0

Если вы хотите, чтобы grep возвращал только соответствующие строки (а не всю строку), вы должны использовать опцию -o (или --only-matching).

2

Я не понимаю, почему вы используете скрипт для чтения файла, так как Grep работает с файлами, но это ваш собственный выбор (возможно, вы выполняете некоторую предварительную обработку).

Это извлекает то, что между «':

$ grep -o '".*"' <file> 
"foo" 
"bar" 
"foo.bar.server" 

Если вам нужно избавиться от«»»:

$ grep -o '".*"' <file> | tr -d '"' 
foo 
bar 
foo.bar.server 
+0

хорошо, мой скрипт не просто читает файлы, я просто сделал это так, чтобы упростить мой пример. –

1

Если вы хотите дать AWK шанс это довольно просто :

awk -F '"' 'NF>2{print $2}' inFile 
Смежные вопросы