1 解压文件,移动文件,删除特定目录
#!/bin/bash pa=$(cd `dirname $0`; pwd) //获得当前目录的绝对路径 v_dir=${pa}"/"$1 mkdir ${v_dir} dirDist=${v_dir}"/utxt/soft/eventd_bej/backup" echo "pa= "${pa} echo "v_Dir= "${v_dir} echo "dirDist= "${dirDist} tar -zvxf $1".tar.gz" -C ${v_dir} mv `find ${dirDist}"/" -name "*o"` ${v_dir}"/" rm -rf ${v_dir}"/utxt/"
2 文本操作工具
sed 修改和编辑文本文件中的某些行 awk 访问和操作某些数据 grep 搜索
#!/bin/bash # KpiAggregator run script(mainly for crontab) # author: Alfred # created: 2015/08/31 # history: # 2015/08/31 - add sourcing /etc/profile and ~/.bash_profile to solve crontab env problem . /etc/profile . /home/sms/.bash_profile v_dir=$(dirname $0) v_basename=$(basename $0 .sh) v_logname=${v_dir}/${v_basename} # parameters v_topo_index=$(echo $v_basename | awk -F'_' '{print $3}') v_redis_url=$(grep "^${v_topo_index}.redis.url" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1) v_db_driver=$(grep "^${v_topo_index}.db.driver" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1) v_db_url=$(grep "^${v_topo_index}.db.url" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1) v_db_user=$(grep "^${v_topo_index}.db.user" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1) v_db_password=$(grep "^${v_topo_index}.db.password" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1) v_monitor_time=$(grep "^${v_topo_index}.monitor.time" $v_dir/config.ini | awk -F '=' '{print $2}' | head -1)
3 循环和条件判断
在此说一下我常用的两个结构: 1. for i in $(seq 1 100); do echo $i done 2. for (( i = 1 ; $i <= 100; i++ )) ;do echo $i; done
4 分组排序测试
#!/bin/bash cat /nfsdata/chaintest/*.dat|awk -F ',' '{gp=strtonum("0x"substr($1,length($1)-2))%32;ci=gp<10?"00"gp:"0"gp;print >"/nfsdata/chaintest/S_"ci".txt"}'; i=0; mkdir -p /nfsdata/tmp; while test $i -lt 32 do if test $i -lt 10 then ci=00$i else ci=0$i fi sort -u -k 1 -k 2 -t , -T /nfsdata/tmp /nfsdata/chaintest/S_${ci}.txt -o /nfsdata/chaintest/PS_${ci}.txt;i=`expr $i + 1`; done; rm -r /nfsdata/tmp;
5 sed 和 awk学习
转换格式 dos2unix filename 去除文件中的双引号 sed 's/\"//g' filename >> rs1 删除第一列 awk '{$1="";print $0}' rs1 >> rs2 删除行首空格 sed 's/^[ \t]*//g' rs2 >> rs3 删除空行 sed '/^$/d' rs3 >> rs4 空格变为逗号 sed 's/ /,/g' rs4 >> rs5
删除最后一行
sed -i '$d' filename
删除第3行
sed -i '3d' filename
扩展阅读
在UNIX上使用sed命令进行字符串处理中常常遇到的问题就是行首行尾的空格怎么删除。 下面介绍sed是怎样实现的,当然awk同样可以。 1:行首空格 sed 's/^[ \t]*//g' 说明: 第一个/的左边是s表示替换,即将空格替换为空 第一个/的右边是表示后面的以xx开头 中括号表示“或”,空格或tab中的任意一种。这是正则表达式的规范。 中括号右边是*,表示一个或多个。 第二个和第三个\中间没有东西,表示空 g表示替换原来buffer中的,sed在处理字符串的时候并不对源文件进行直接处理,先创建一个buffer,但是加g表示对原buffer进行替换 整体的意思是:用空字符去替换一个或多个用空格或tab开头的本体字符串 2:行末空格 sed 's/[ \t]*$//g' 和上面稍微有些不同是前面删除了^符,在后面加上了美元符,这表示以xx结尾的字符串为对象。 但是要注意在KSH中,Tab并不是\t而是直接打入一个Tab就可以了。 3删除所有的空格 sed s/[[:space:]]//g