linux

  在这里记录了我自己在写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]}'

原文地址:https://www.cnblogs.com/heyesp/p/4126579.html