Grep para conteúdo entre dois marcadores com novas linhas

3

Apenas curioso para saber se há uma maneira de mostrar a saída entre dois marcadores?

Eu estava tentando grep -r "<cron_expr>.*</run>" * , mas não parece estar retornando como esperado. O que significa que não está mostrando quebras de nova linha?

Então, eu acho que a verdadeira questão é como posso descobrir o que entre dois marcadores independentemente da nova linha BS. Eu não posso instalar neste sistema, então não pcregrep = (

Talvez AWK?

(por exemplo, alguém deve fazer uma tag 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>

Eu só quero mostrar o que está na linha <schedule> e <run> (s se mais que uma, como acima) sempre que eu vejo e em qual arquivo eles estão.

    
por ehime 04.05.2012 / 23:39

2 respostas

2

Script AWK

O AWK é provavelmente a resposta usando o padrão / start /, / stop / assim:

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

Isso imprimirá tudo na programação e executará tags (incluindo as tags) e preservará novas linhas. Adapte-o para imprimir o que você precisa. Para executá-lo:

cat myfile.txt | awk -f script.awk

folha de estilo XSLT

Aqui está uma versão XSLT que deve fazer algo muito semelhante. Execute-o usando xsltproc, que deve ser instalado por padrão.

<?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>
    
por Bruno Girin 05.05.2012 / 00:10
0

Existem muitas maneiras de fazer o que eu acho que você também quer.

você poderia usar sed

diga que queria obter os números entre lspci -nn

mostra números como este

[1234: 4321]

Eu faria isso

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

Este é o meu primeiro post aqui, então espero que os caracteres de escape estejam corretos. Mas não tenho certeza do que você está tentando fazer.

    
por Joseph Mills 05.05.2012 / 00:01

Tags