2015-04-16 9 views
-2

Я хочу напечатать раздел (абзац) текста между строками содержит regexp, пожалуйста, помогите, как это можно сделать grep, а не awk или sed, или найти регулярное выражение grep и напечатать с помощью awk | СЭД. Я использую его в скрипте, а regexp - переменный. парам - это образец регулярного выражения (ERE)bash: grep paragraph с regexp

awk -v RS="<section>" "/$param/" "$FILE" <!--it's now, but I need to find param by grep--> 

пример файла:

<section> 
interface gigabitEthernet 7 // 192.168.248.200 
    switchport access vlan 1 
    switchport mode access 
    port shutdown 
<section> 
interface gigabitEthernet 8 // 
    switchport access vlan 2 
    switchport mode trunk 
<section> 
+1

Что такое '$ param' в этом случае? –

+1

Каков ваш ожидаемый результат? –

+0

Вы не можете. Есть много инструментов, которые могут сделать это легко, но «grep» не является одним из них. – tripleee

ответ

1

Как уже было отмечено, grep не является идеальным инструментом для решения этой задачи. Тем не менее он может работать, если вы используете два из них ;-)

grep -Pzo "(?s)^$|<section>([^<]*${param}[^<]*)" "$FILE" | grep -v '<section>' 

-Pzo активирует перл регулярные выражения, согласование нескольких строк и вывод пределы для согласованной части, увидеть эту related question.

Обратите внимание, что выход отличается от результата вывода awk в пробелах, а не для поддержки grep-реализаций -P.

+0

Большое спасибо, но может быть сделано с grep -E, чтобы найти абзац, или я могу сделать что-то еще? шаблон для параметра расширенного регулярного выражения (ERE) –

+0

@ Сергей Смирнов: Я не думаю, что это можно сделать с помощью '-E'. В конце концов, 'grep' по-прежнему является линейным инструментом. Но вы можете обнаружить, что ваш фрагмент ERE работает с двигателем PCRE. ERE не является строго подмножеством PCRE, но большинство выражений ERE должно работать (источник: этот [ответ] (http://stackoverflow.com/a/1428905/4024473) по соответствующей теме) –

Смежные вопросы