Grep输出多行,需要循环

时间:2013-03-05 04:55:49

标签: bash

我有一个脚本,它使用grep查找文本文件中的行(ics日历是特定的)

我的脚本找到一个日期匹配,然后上下几行将约会的摘要和开始时间复制到一个单独的变量中。我遇到的问题是我将同时进行多次约会,我需要在grep中查看每个结果的整个过程。

示例:

LINE=`grep -F -n 20130304T232200 /path/to/calendar.ics | cut -f1 d:`

它只输出线条,例如 86 89

然后继续捕捉我的其他变量,如下:

SUMMARYLINE=$(( $LINE + 5 ))
SUMMARY:`sed -n "$SUMMARYLINE"p /path/to/calendar.ics 

我的脚本运行正常,只有一个输出,但它显然不会超过1,我需要它。我应该将grep结果发送到数组中吗?一个单独的文本文件来读取?我确定我会在这里以某种方式需要一个while循环。需要一些帮助。

2 个答案:

答案 0 :(得分:1)

您可以很容易地从循环中调用grep

while IFS=':' read -r LINE notused   # avoids the use of cut
do
    # First field is now in $LINE
    # Further processing

done < <(grep -F -n 20130304T232200 /path/to/calendar.ics)

但是,如果文件不是太大,那么将整个文件读入数组可能会更容易。

答案 1 :(得分:0)

根据您提出的解决方案,您将多次阅读该文件。使用awk,你可以一次完成:

awk -F: -v time=20130304T232200 '
    $1 == "SUMMARY" {summary = substr($0,9)} 
    /^DTSTART/ {start = $2}
    /^END:VEVENT/ && start == time {print summary} 
' calendar.ics