Проблема манипулирования текстом с помощью grep

Я хочу найти строку, содержащую log4j и взять 7 строк до и 3 строки после совпадения.

grep -B7 -A3 "log4j" web.xml

После этого я хочу добавить теги комментариев перед этим абзацем и после него.

<!--
paragraph that i found by grep
-->

Я написал этот скрипт ниже:

search=`find . -name 'web.xml'`
text=`grep -B7 -A3 "log4j" $search`
sed -i "/$text/c $newparagraph" $search

Это не работает. Можно ли просто добавить символ комментария, а не заменить абзац?

Что я хочу сделать в сценарии:

  1. поиск абзаца
  2. append [ 116]
  3. добавить -> в конце

Редактировать : этот абзац пытается манипулировать:

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<listener>
    <listenerclass>
        org.springframework.web.util.Log4jConfigListener
    </listener-class>
</listener>

Этот абзац часть многих абзацев! Я хочу сделать это так:

<!--
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<listener>
    <listenerclass>
        org.springframework.web.util.Log4jConfigListener
    </listener-class>
</listener>
-->
4
задан 6 March 2011 в 16:51

1 ответ

Это было бы лучше сделать с библиотекой XML, но здесь это в sed ...

Sed имеет команды i и a для вставки и добавления строк. Я думаю, что следующий скрипт поможет.

sed -n '/log4jConfigLocation/=' < test.test |\
while read index; do
    sed -i $search -e "$((index-1)) i\ <\!--" -e "$((index+8)) a\ -->" < $search
done

Первая часть, `sed -n '/ log4jConfigLocation / =' получит номера строк, которые имеют 'log4jConfigLocation'. Следующая часть использует эти номера строк в двух командах: вставьте строку на 1 строку выше и добавьте строку на 8 строк ниже.

Есть лучший способ использовать буфер хранения sed, но я недостаточно знаком с ним; если вам интересно, вы можете посмотреть это руководство . В конечном счете, тем не менее, если вы собираетесь регулярно работать с такими вещами, вам следует проверить XMLStarlet .

0
ответ дан 6 March 2011 в 16:51

Другие вопросы по тегам:

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