使用换行符查找两个标记之间的内容

使用换行符查找两个标记之间的内容

只是好奇是否有办法可以显示两个标记之间的输出?

我尝试过grep -r "<cron_expr>.*</run>" *,但似乎没有按预期返回。也就是说它没有显示换行符?

所以我想真正的问题是,无论换行符是什么,我如何才能找出两个标记之间的内容。我无法在此系统上安装,因此没有 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>

我只想在看到时显示<schedule><run>行上的内容(如果多于一行,如上所示)以及它们所在的文件。

答案1

AWK 脚本

AWK 可能是使用 /start/,/stop/ 模式的答案,如下所示:

/<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

我认为有很多方法可以做您想做的事情。

你可以使用 sed

说我想得到 lspci -nn 之间的数字

它输出的数字如下

[1234:4321]

我会这样做

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

这是我在这里的第一篇帖子,所以我希望转义字符是正确的。但我不确定你想做什么。

相关内容