这令我感到困惑,请帮忙: - )
我有一个程序,有时会通过CLI运行,有时虽然是cron,但它们都是同一个用户,并且都在bash中。
在cron中,我使用SHELL=/bin/bash
强制bash。
脚本中的违规命令是:
egrep -v "$^" playlist.txt | egrep -v "[^ -.[:alnum:]]" >>formattedPlaylist.txt
基本上,它应该从播放列表中删除所有空行,然后删除除[A-Za-z0-9 - 。]以外的任何行。
出于某种原因,当从cli以用户身份运行时,这不会过滤掉许多字符,而如果cron运行它,它将完全按预期工作。
未滤除的字符为:
% $ # ! * & ( ) '
任何想法??
答案 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
我还通过合并两个正则表达式来简化命令,但语言环境修复是你问题的答案。