在这里记录了我自己在写shell脚本的时候遇到的问题和解决的方法。方便以后查阅。
1.正则表达式应用
a. 匹配含有a或b或c或d,开头和结尾是任意字符的字符串
egrep '*a|b|c|d*'
awk '$2 $3 $4 ~ / *a|b|c|d/'
b.匹配开头是固定字符(23),并把后六位替换成000000
echo "23222sssss"|awk '{if($1 ~ /^23/){$1=sprintf("%013d",$1);$1=substr($1,0,7)"000000";print $0}else{print}}'
c. 补齐13位
echo "232223111111"|awk '{print sprintf("%013d",$1)}' // 0232223111111
d .匹配开头是2,固定12位的字符串
echo "232223111111 2322231 3333 223333"|tov|grep '^2...........$'
echo "232223111111 2322231"|tov|awk '{if($1 ~ /^2...........$/){$1=substr($1,0,7)"000000";print $0}else{print}}'
2.倒序排列 (a是一个文件)
cat a |
LANG=C sort -nr -k2
3.如何获得某个月的开始日和结束日
monthindex="201503"
firstday="${monthindex}""01" #此月开始日
lastday=$(date -d `date -d "$firstday +1 month" +%Y%m01`"-1 day" +%Y%m%d) #此月结束日
lastday=$(date -d `date -d " +1 month" +%Y%m01`"-1 day" +%Y%m%d) #当月结束日(最后一天)
4.截取最后一个"_"之后的字符串
5.如何区分文件夹和文件
ls -F|tov
结果:
20150421/ #文件夹
DETAIL/
data2.csv #文件
data3
处理:
ls -F|tov|awk '{if($1 ~ //$/){print $1,"dir"}else{print $1,"leaf"}}'
结果:
20150421/ dir
DETAIL/ dir
data2.csv leaf
data3 leaf
6.如何去掉后缀.csv
7、倒序
LANG=C sort -k2,2nr
8.截取字符串
awk '{split($3,b,"(");print $1,$2,b[1]}'