egrep - 正则表达式过滤字符仅在通过cron运行时有效吗?

时间:2016-03-25 13:11:53

标签: regex bash cron

这令我感到困惑,请帮忙: - )

我有一个程序,有时会通过CLI运行,有时虽然是cron,但它们都是同一个用户,并且都在bash中。

在cron中,我使用SHELL=/bin/bash强制bash。

脚本中的违规命令是:

egrep -v "$^" playlist.txt | egrep -v "[^ -.[:alnum:]]" >>formattedPlaylist.txt

基本上,它应该从播放列表中删除所有空行,然后删除除[A-Za-z0-9 - 。]以外的任何行。

出于某种原因,当从cli以用户身份运行时,这不会过滤掉许多字符,而如果cron运行它,它将完全按预期工作。

未滤除的字符为:

% $ # ! * & ( ) '

任何想法??

2 个答案:

答案 0 :(得分:1)

尝试:

 sed  '/[^-A-Za-z0-9.\x27 ]/d;/''/d;/^\s*$/d' playlist.txt > cleaned_playlist.txt

输入文字:

A goat
232423

-sdf-g
Here it goes
'keep me
$ let it go
\ this one too

输出:

A goat
232423
-sdf-g
Here it goes
'keep me

答案 1 :(得分:1)

尝试明确设置您的语言区域。

LC_ALL=C egrep -v "$^|[^ -.[:alnum:]]" playlist.txt >>formattedPlaylist.txt

我还通过合并两个正则表达式来简化命令,但语言环境修复是你问题的答案。