我有一个脚本,它使用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循环。需要一些帮助。
答案 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