如何grep文件中的变量?

时间:2014-03-12 20:15:43

标签: bash shell grep

我想知道如何在文件中插入(排除)变量?

例如file.txt:

PATH1=/path/to/file
PATH2=/path/to/anotherfile
PATH3=/path/to/thirdfile
TEST=$(echo $RANDOM)

* * * * *\5 top -n 1 > /tmp/$TEST
* * * * * echo hello # = for deletion

我想只打印没有变量的cron作业: e.g:

* * * * *\5 top -n 1 > /tmp/$TEST
* * * * * echo hello # = for deletion

请注意,最后有相同的标志,我也需要保留这些线条。 拖尾这个文件不是一个解决方案,当然不仅仅有一行不是变量。 任何想法?

4 个答案:

答案 0 :(得分:5)

使用Vixie cron,crontab行是:

  1. 如果第一个非空白字符为#

  2. ,则为注释
  3. 如果第一个非空白字符是字母或_

  4. ,则设置环境
  5. 一个cron命令,如果第一个非空白字符是数字,*或@

  6. 如果没有非空白字符,则为空行

  7. 否则出错。

  8. 所以grep for case 3(cron命令):

    grep -E '^[[:blank:]]*[0-9*@]'
    

    或者,要删除案例2(环境设置),但保留其他所有内容,包括注释和错误:

    grep -Ev '^[[:blank:]]*[a-zA-Z_]'
    

答案 1 :(得分:1)

使用grep -v

 grep -v '=' filename

或者您只能grep进行所需的参赛作品。

$ grep '\*' filename
* * * * *\5 top -n 1 > /tmp/$TEST

答案 2 :(得分:1)

使用以下grep,它只会排除变量设置行:

grep -iv '^[[:blank:]]*[_a-z][_a-z0-9]*[[:blank:]]*='

答案 3 :(得分:1)

我有一个答案! 你的问题让我想到你为什么要过滤声明...因为声明没有" 做实际的工作" 。从这个意义上讲,它们是不可见的:)

所以我的解决方案过滤掉了声明等隐形命令......当然,如果这个example.txt包含有趣的rm -Rf /或其他unix命令仍然没有输出,那么你可以将它与某种{ {1}}字符搜索。

所以我的观点是声明没有输出,其他的话会这样做......这是我的有趣答案:

=