
shell脚本中使用正则的方法
请教大家关于脚本中使用正则的问题,我想写一个自动删除当前月之前日志的脚本DIR=/root/testMONTH=`/bin/date+%Y-%m`FILENAME=`/b...
请教大家关于脚本中使用正则的问题,我想写一个自动删除当前月之前日志的脚本
DIR=/root/test
MONTH=`/bin/date +%Y-%m`
FILENAME=`/bin/ls /root/test/ > /root/filename`
while read LINE ; do
if [ $LINE != "localhost.$MONTH-*.log" ];then
/bin/rm -f $DIR/$LINE
fi
done < /root/filename
我想让$MONTH后面的.*表示任意长度任意字符。可是在执行的时候脚本并没有进行正则匹配。直接就使用字符* 为什么不进行匹配呢? 展开
DIR=/root/test
MONTH=`/bin/date +%Y-%m`
FILENAME=`/bin/ls /root/test/ > /root/filename`
while read LINE ; do
if [ $LINE != "localhost.$MONTH-*.log" ];then
/bin/rm -f $DIR/$LINE
fi
done < /root/filename
我想让$MONTH后面的.*表示任意长度任意字符。可是在执行的时候脚本并没有进行正则匹配。直接就使用字符* 为什么不进行匹配呢? 展开
1个回答
展开全部
双引号里*不扩展。
test命令字符串比较是一对一的。即使*扩展了,也会报语法错误。
如果检测字符串是否匹配模式,可以使用grep命令。
echo 字符串 | grep -q -s "正则"
匹配返回true,否则是false。
下面的命令可以实现你的需求。
find /root/test -type f ! -name "localhost.`/bin/date +%Y-%m`-*.log" | xargs rm -f
test命令字符串比较是一对一的。即使*扩展了,也会报语法错误。
如果检测字符串是否匹配模式,可以使用grep命令。
echo 字符串 | grep -q -s "正则"
匹配返回true,否则是false。
下面的命令可以实现你的需求。
find /root/test -type f ! -name "localhost.`/bin/date +%Y-%m`-*.log" | xargs rm -f
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询