字符串截取掉子字符串
Linux 的字符串截取很有用。有八种方法。
假设有变量 var=
http://www.aaa.com/123.htm
.
-
# 号截取,删除左边字符,保留右边字符。
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
-
## 号截取,删除左边字符,保留右边字符。
echo ${var##*/}
其中 ##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除
http://www.aaa.com/
结果是 123.htm
-
%号截取,删除右边字符,保留左边字符
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:
http://www.aaa.com
-
%% 号截取,删除右边字符,保留左边字符
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
-
从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
-
从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
-
从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
-
从右边第几个字符开始,一直到结束。
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
删除某个目录下的文件
fileDir=/test/
tempFileName=`ls $fileDir`
fileNames=($(echo $tempFileName))
for fileName in ${fileNames[@]}
echo "`date +'%F %H:%M:%S'` rm file $fileName"
rm $fileDir$fileName
删除日志目录的下几天之前的日志文件
此功能用到了上面的所有代码
场景:日志目录下一天一个日志文件,日志文件以日期为后缀
例如: test.log(当天的日志文件),test.log.2017-12-24(历史的日志文件)
代码如下:
#!/bin/bash
delete_days=2
fileDir=/test/
fileNamePre=test.log.
tempFileName=`ls $fileDir`
fileNames=($(echo $tempFileName))
today=`date +%F`
todayTime=`date -d "$today" +%s`
echo "`date +'%F %H:%M:%S'` 删除目录${fileDir}下${delete_days}天前日志!"
for fileName in ${fileNames[@]}
if [[ $fileName == $fileNamePre* ]]; then
fileDay=${fileName#*$fileNamePre}
fileDayTime=`date -d "$fileDay" +%s`
dayTime=$[todayTime-fileDayTime]
if [[ $dayTime -gt $[delete_days*24*60*60] ]]; then
echo "`date +'%F %H:%M:%S'` rm file $fileName"
rm $fileDir$fileName
echo "`date +'%F %H:%M:%S'` 删除日志结束!"