Как обращаться с круглыми скобками в grep? - PullRequest
2 голосов
/ 19 января 2012

str имеет следующий шаблон:

1 abc (1 <something>)

Например:

1 abc (1 hello)
1 abc (1 shalom)
1 abc (1 hola)

Как я могу извлечь <something> из str, используя egrep?

Ответы [ 2 ]

8 голосов
/ 19 января 2012

Если вы хотите извлечь только <something>, я бы предложил grep -P (регулярное выражение perl):

grep -P -o '(?<=\(1 ).*?(?=\))' INPUTFILE

-o возвращает только совпадающую часть, равную <something>.Регулярное выражение ищет текст, которому предшествует (1, а затем ).

Вы не сможете сделать это с помощью egrep, поскольку оно не поддерживает обходные пути.Лучшее, что вы можете сделать, это извлечь (1 <something>) с помощью:

egrep -o '\(1 (.*)\)' INPUTFILE

[foo@bar ~]$ grep -P -o '(?<=\(1 ).*?(?=\))' INPUTFILE
hello
shalom
hola

[foo@bar ~]$ egrep -o '\(1 (.*)\)' INPUTFILE
(1 hello)
(1 shalom)
(1 hola)
1 голос
/ 19 января 2012

В качестве альтернативы вы можете использовать для этого простой awk однострочный.

awk -F"[ )]" '{print $(NF-1)}' filename

Тест:

[jaypal:~/Temp] cat filename
1 abc (1 hello)
1 abc (1 shalom)
1 abc (1 hola)

[jaypal:~/Temp] awk -F"[ )]" '{print $(NF-1)}' filename
hello
shalom
hola
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...