在今天使用grep时出现EOF错误

时间:2017-05-23 09:55:14

标签: bash grep

我有一个文件file.log,格式如下:

27/07 01:15:10,072  [INFO ] test    Start Batch Calculation Com 
27/07 06:22:27,862  [INFO ] test    End Batch Calculation Com 
27/07 06:22:36,192  [INFO ] test    Start Batch Fact 
27/07 06:22:36,896  [INFO ] test    End Batch Fact 
27/07 06:22:43,607  [INFO ] test    Start Batch Edition
27/07 06:22:44,888  [INFO ] test    End Batch Edition
23/05 01:15:10,072  [INFO ] test    Start Batch Calculation Com 
23/05 06:22:27,862  [INFO ] test    End Batch Calculation Com 
23/05 06:22:36,192  [INFO ] test    Start Batch Fact 
23/05 06:22:36,896  [INFO ] test    End Batch Fact 
23/05 06:22:43,607  [INFO ] test    Start Batch Edition
23/05 06:22:44,888  [INFO ] test    End Batch Edition

我正在编写一个ksh脚本来获取包含23/05的字符串End Batch Calculation Com的行。 23/05是实际日期。 以下是我的代码:

   DateCom=`grep 'End Batch Calculation Com ' file.log |grep "^`date +'%d/%m'`"`
   echo "$DateCom"

但是我收到以下错误:

    ./test.sh: command substitution: line 35: unexpected EOF while looking                         for matching `"'
./test.sh: command substitution: line 36: syntax error: unexpected end                         of file
./test.sh: command substitution: line 35: unexpected EOF while looking                         for matching `"'
./test.sh: command substitution: line 36: syntax error: unexpected end                         of file
date +%d/%m

知道为什么吗?

2 个答案:

答案 0 :(得分:0)

使用美元括号表示法进行命令替换,允许嵌套:

DateCom=$(grep 'End Batch Calculation Com ' file.log |grep "^$(date +'%d/%m')")

答案 1 :(得分:0)

尝试:

DateCom=$(grep  "^$(date +%d/%m).*End Batch Edition"  Input_file)
echo $DateCom

输出如下:

23/05 06:22:44,888 [INFO ] test End Batch Edition

我在变量名后面使用$()来将命令的值输入变量。使用字符串Batch Edition检查系统的当前日期(如果它是从一行开始)。然后打印变量值。

修改

<强>第一

grep "End Batch Edition"  Input_file | grep -o "^$(date +%d/%m)"

<强>第二

grep "^$(date +%d/%m).*End Batch Edition"  Input_file | cut -c1-5

所以上面可以帮助你,在EDIT之后的第一个解决方案,我正在搜索你提到的字符串然后搜索今天的日期,它只会打印出来。

在OR之后的解决方案,只需搜索从今天的日期广告开始的字符串中的字符串,然后我使用剪切来获取前5个字母,这些字母只是日期和月份。