Grep для содержимого между двумя маркерами с символами новой строки

Любопытно, есть ли способ показать результат между двумя маркерами?

Я пытался grep -r "<cron_expr>.*</run>" *, но он, похоже, не возвращается, как ожидалось. Что означает, что он не показывает переходы на новую строку?

Итак, я думаю, что реальный вопрос заключается в том, как я могу узнать, что между двумя маркерами, независимо от новой строки BS. Я не могу установить эту систему, поэтому нет pcregrep = (

Возможно, AWK?

(Ps кто-то должен сделать AWK-тэг)

<crontab>
    <jobs>
        <enterprise_reward_balance_warning_notification>
            <schedule><cron_expr>1 * * * *</cron_expr></schedule>
            <run><model>enterprise_reward/observer::scheduledBalanceExpireNotification</model></run>
        </enterprise_reward_balance_warning_notification>
        <enterprise_reward_expire_points>
            <schedule><cron_expr>1 * * * *</cron_expr></schedule>
            <run><model>enterprise_reward/observer::scheduledPointsExpiration</model></run>
        </enterprise_reward_expire_points>
    </jobs>
</crontab>

I просто хочу показать, что на линии <schedule> и <run> (s, если более одного, как и выше) в любое время, когда я вижу и в каком файле они находятся.

3
задан 5 May 2012 в 03:12

5 ответов

Скрипт AWK

AWK, вероятно, является ответом с использованием / start /, / stop / pattern следующим образом:

/<schedule>/,/<\/schedule>/ {
    print;
}
/<run>/,/<\/run>/ {
    print;
}

Это будет печатать все в расписании и запускать теги (включая теги) и сохранит новые строки. Адаптируйте его, чтобы распечатать то, что вам нужно. Для запуска:

cat myfile.txt | awk -f script.awk

AWK script

Вот версия XSLT, которая должна делать что-то очень похожее. Запустите его с помощью xsltproc, который должен быть установлен по умолчанию.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="schedule">
    <xsl:value-of select="." />
</xsl:template>

<xsl:template match="run">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>
2
ответ дан 25 May 2018 в 11:52
  • 1
    Я не могу установить новые вещи на нашем веб-сервере, поэтому мне нужно работать с инструментами, которые у меня есть (grep sed / awk) = (Могу ли я выплюнуть весь контент между двумя экземплярами crontab? – ehime 5 May 2012 в 03:21
  • 2
    Как вы делаете awk без тегов поиска? – rynop 10 September 2012 в 18:09
  • 3
    AWK может оказаться не лучшим инструментом, если вы хотите исключить теги поиска, потому что он ориентирован на линию, так что в основном он соответствует начальной строке и конечной строке. Если вы хотите исключить разделители, версия XSLT будет более адаптирована, потому что XSLT понимает структуру XML и позволит вам манипулировать дочерними узлами. На практике пример XSLT, описанный выше, удаляет все теги XML и выводит только текст. – Bruno Girin 10 September 2012 в 21:36

Скрипт AWK

AWK, вероятно, является ответом с использованием / start /, / stop / pattern следующим образом:

/<schedule>/,/<\/schedule>/ {
    print;
}
/<run>/,/<\/run>/ {
    print;
}

Это будет печатать все в расписании и запускать теги (включая теги) и сохранит новые строки. Адаптируйте его, чтобы распечатать то, что вам нужно. Для запуска:

cat myfile.txt | awk -f script.awk

Таблица стилей XSLT

Вот версия XSLT, которая должна делать что-то очень похожее. Запустите его с помощью xsltproc, который должен быть установлен по умолчанию.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="schedule">
    <xsl:value-of select="." />
</xsl:template>

<xsl:template match="run">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>
2
ответ дан 7 August 2018 в 18:50

Скрипт AWK

AWK, вероятно, является ответом с использованием / start /, / stop / pattern следующим образом:

/<schedule>/,/<\/schedule>/ {
    print;
}
/<run>/,/<\/run>/ {
    print;
}

Это будет печатать все в расписании и запускать теги (включая теги) и сохранит новые строки. Адаптируйте его, чтобы распечатать то, что вам нужно. Для запуска:

cat myfile.txt | awk -f script.awk

Таблица стилей XSLT

Вот версия XSLT, которая должна делать что-то очень похожее. Запустите его с помощью xsltproc, который должен быть установлен по умолчанию.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="schedule">
    <xsl:value-of select="." />
</xsl:template>

<xsl:template match="run">
    <xsl:value-of select="." />
</xsl:template>

</xsl:stylesheet>
2
ответ дан 10 August 2018 в 07:27

Есть много способов сделать то, что, как я думаю, вам тоже нужно.

вы могли бы использовать sed

, я хотел бы получить числа между lspci -nn

он выплескивает числа, подобные этому

[1234: 4321]

Я бы сделал это

lspci -nn| sed 's/.*\[\(.*\)\].*/\1/'

Это мой первый пост здесь поэтому я надеюсь, что символ побега верен. Но я не уверен, что вы пытаетесь сделать.

0
ответ дан 25 May 2018 в 11:52

Есть много способов сделать то, что я думаю, что вы тоже этого хотите.

вы могли бы использовать sed

, я хотел бы получить числа между lspci -nn

он выплескивает числа, подобные этому

[1234: 4321]

Я бы сделал это

lspci -nn| sed 's/.*\[\(.*\)\].*/\1/'

Это мой первый пост здесь поэтому я надеюсь, что символ побега верен. Но я не уверен, что вы пытаетесь сделать.

0
ответ дан 7 August 2018 в 18:50

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

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