只是好奇是否有办法可以显示两个标记之间的输出?
我尝试过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/'
这是我在这里的第一篇帖子,所以我希望转义字符是正确的。但我不确定你想做什么。