我尝试在文件中grep日期而不是工作

时间:2018-02-05 13:58:40

标签: grep sh

文件是这样的:

20180203235900 DEFAULT, Proc_m0_s1 
20180203235900 DEFAULT, Proc_m0_s17
20180203235900 DEFAULT, Proc_m0_s19
20180203235900 DEFAULT, Proc_m0_s3
20180203235900 DEFAULT, Proc_m0_s5 
20180203235900 DEFAULT, Proc_m0_s7 
20180203235900 DEFAULT, Proc_m1_s11
20180203235900 DEFAULT, Proc_m1_s13
20180204200000 DEFAULT, Proc_m0_s1
20180204200000 DEFAULT, Proc_m0_s17
20180204200000 DEFAULT, Proc_m0_s19
20180204200000 DEFAULT, Proc_m0_s3 
20180204200000 DEFAULT, Proc_m0_s5 
20180204200000 DEFAULT, Proc_m0_s7 
20180204200000 DEFAULT, Proc_m1_s11
20180204200000 DEFAULT, Proc_m1_s13

我正在使用

DATE=`eval date +%Y%m%d`
grep -e $DATE* -e DEFAULT* file.txt > fileoutput.txt

1 个答案:

答案 0 :(得分:1)

  1. 这里不需要eval,因为反引号已经评估了它们所包含的表达式。

  2. 如果要将带星号的表达式传递给grep之类的命令,则必须引用表达式(例如grep -r "$DATE*" …)。如果希望解释变量,请记住使用双引号。

  3. 实际上,在这种情况下你根本不需要星号,因为grep无论如何都应该匹配。

  4. 对您有用的是:

    mydate=$(date +%Y%m%d)
    grep -e $mydate -e DEFAULT file.txt > fileoutput.txt
    

    (注意:我更喜欢用小写字母拼写局部变量,因为可读性,我使用$()代替反引号。)