在Linux中获取输出的特定部分

时间:2014-03-05 08:50:01

标签: linux shell

我有一个shell脚本的输出:

aaa.sh输出

     Tue Mar 04 01:00:53 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 07:21:52 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 13:17:16 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 04 16:56:01 2014
     SQL> ALTER DISKGROUP fra  ADD DISK  '/dev/rhdisk20' 
     Wed Mar 05 00:03:42 2014
     Time drift detected. Please check VKTM trace file for more details.
     Wed Mar 05 04:13:39 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 05 05:56:07 2014
     GMON querying group 3 at 10 for pid 18, osid 27590856
     GMON querying group 3 at 11 for pid 18, osid 27590856

我需要从今天的日期开始获取该部分:

     Wed Mar 05 00:03:42 2014
     Time drift detected. Please check VKTM trace file for more details.
     Wed Mar 05 04:13:39 2014
     Time drift detected. Please check VKTM trace file for more details.
     Tue Mar 05 05:56:07 2014
     GMON querying group 3 at 10 for pid 18, osid 27590856
     GMON querying group 3 at 11 for pid 18, osid 27590856

5 个答案:

答案 0 :(得分:3)

您可以使用正确的格式获取日期:

today=$(date +'%a %b %d')

然后像这样搜索:

grep "$today" aaa.sh

如果今天有没有日期的行,例如你的GMON行,你可以添加-A来说明之后的行数并使用一个大数字:

grep -A 999999 "$today" aaa.sh

如果您在AIX上并且没有-A选项,请使用这样的sed:

today=$(date +'%a %b %d')
sed -n "/${today}/,$ p" aaa.sh

<强>解释

那就是将今天的日期存储在变量today中,格式为“Wed Mar 05”。然后搜索,不打印任何内容(-n)直到找到该日期,从那时起,直到文件末尾($)打印所有行(p)。

答案 1 :(得分:1)

您可以使用

  tail -n 7 filename

获取所需的输出。它基本上会为您提供名为filename的文本文件的最后七行。

要从今天开始获得解决方案,您可以使用:

 k=$(date +"%a %b %d")
 g=$(grep -nr "$k" in|cut -f1 -d:|head -1)
 total=$(wc -l<in)
 l=`expr $total - $g + 1
 tail -n$l in

答案 2 :(得分:1)

我想我有一个简单的解决方案:

获取date以与文件中的日期匹配的格式输出日期(在格式化选项上选中man date)。由于我们不想匹配小时/分钟/秒,因此我们必须拨打date两次:一次是工作日/月/日的一半,一次是全年的一半。在这两半之间,我们将horus / minutes / seconds与.*正则表达式匹配。

然后做:

aaa.sh | grep -E '`date --only-weekday-month-day`.*`date --only-year`' -A 999999

答案 3 :(得分:1)

虽然我使用NewWorld的答案,但可以修改为,

转换类似于文件格式的日期输出

假设在变量'D'中你得到了那个输出

sed '1,/${D}/d' aaa.sh

将在匹配日期匹配后输出所有行。

示例:假设您获得D="Wed Mar 05 00:03:42 2014"

输出将如预期一样。

答案 4 :(得分:1)

尝试

sed -n '/Wed Mar 05/,$p' aaa.sh

此处-n表示“除非另有指定,否则不打印任何内容”。 首先出现一条与表达式/ Wed \ Mar \ 05 /匹配到文件末尾的行,将打印出来(p)“