我有一个文件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
知道为什么吗?
答案 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个字母,这些字母只是日期和月份。