我想知道如何在文件中插入(排除)变量?
例如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
请注意,最后有相同的标志,我也需要保留这些线条。 拖尾这个文件不是一个解决方案,当然不仅仅有一行不是变量。 任何想法?
答案 0 :(得分:5)
使用Vixie cron,crontab行是:
如果第一个非空白字符为#
如果第一个非空白字符是字母或_
一个cron命令,如果第一个非空白字符是数字,*或@
如果没有非空白字符,则为空行
否则出错。
所以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}}字符搜索。
所以我的观点是声明没有输出,其他的话会这样做......这是我的有趣答案:
=