ret_v=`echo "_dfsdf122" | grep "^[a-z,A-Z]"`
echo ${#ret_v} #如果输出结果大于0,表示字符串是以字母开头的
3、获取一个字符串中以某个分隔符隔开的第几个字段
比如str1="abc,abd,hh,dd,ee"
ret=`echo "${str1}" | awk -F ',' '{print $4}'`
echo $ret
则输出dd
4、获取用分隔符分割后的最后一个词
echo “eth0” | awk -F "[a-z]" '{print $NF}'
这里输出0。
echo "e,ch0" | awk -F "," '{print $(NF)}' #输出ch0
echo "e,ch0" | awk -F "," '{print $(NF-1)}' #输出e
二、date获取时间值
time_one_month_ago=`date -d "1 month ago" +%s` #获取一个月前的时间值
newday=`date +%Y%m%d`
tt_date=`date --date="${newday} 6 month" +%Y%m%d` #获取当前日期后半年的日期
三、文件操作
查找当前目录下包含指定字符串的文件
grep -R "abc" ./
四、shell数据组定义与操作
order_by_column_list=("abc" "ddd" "dfd" "fdf")
取值:
第一个元素
${order_by_column_list[0]}
五、修改文件中某个变量对应的值
source "/tmp/global_var_define_file"
#自动更新统计开始时间
#变量值为stat_begin_time=2012-11-01
onemonth_interval=`date -d "${stat_begin_time} 1 month" +%Y-%m-%d`
today_date=`date +%Y-%m-%d`
echo "$today_date"
target_stat_begin_time="${stat_begin_time}"
if [ "${onemonth_interval}"x = "${today_date}"x ]; then
echo "equal"
sed -i "/stat_begin_time/s/${stat_begin_time}/${onemonth_interval}/" "/tmp/global_var_define_file"
target_stat_begin_time="${onemonth_interval}"
fi
#如果当前日期为2012-12-01,则/tmp/global_var_define_file文件中变量值被修改,stat_begin_time=2012-12-01
#当此时通过调用${stat_begin_time}获取的值依然为2012-11-01,下次获取时生效
val_someday=`date --date="${target_stat_begin_time}" +%s`
echo "${val_someday}"
六、查找子串
string="abcd你好 "
substr="ce你好 "
ret=`echo ${string} | grep $substr`
echo ${#ret} #如果长度为0,表示substr不在string中,否则,echo $ret输出string
echo $ret
七、清空文件内容
cat /dev/null > test.txt
八、查看监听端口的程序
netstat -tnlp
locate filename
九、查看操作系统是多少位
1、命令:getconf LONG_BIT
显示:32或642、命令:echo $HOSTTYPE
显示(诸如):i686或x86_64
3、命令:uname -a
显示(诸如):Linux 2.6.18-238.el5PAE #1 SMP Thu Jan 13 17:10:20 EST 2011 i686 i686 i386 GNU/Linux
或Linux 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
十、locate查找文件
通过locate查找文件,如果没找到,可能是由于索引还没有建立,执行sudo updatedb来更新索引,然后再执行locate
十一、计算文件中包含某匹配字符串的所有行和、行数
cat abc.txt |grep "xx cost time" | awk '{print $NF}' | awk '{sum+=$1}END{print sum}'
cat abc.txt |grep "xx cost time" | awk '{print $NF}' | awk '{sum+=1}END{print sum}'
# 所以满足条件的行最后一列数值和,总数,平均值
cat abc.txt |grep "xx cost time" | awk '{print $NF}' | awk '{sum+=1;num+=1}END{print sum,num,sum/num}'
十二、mysql读取的多行结果,在变量里处理
#!/bin/bash
mysql="/usr/bin/mysql -h10.1.1.110 -uroot -p123456 test -N -e "
tmp_val=`${mysql} "select name from db1.table1"`
for str in ${tmp_val}
do
echo ${str}
done
十三、浮点数比较
close_slippaged=0
close_slippaged=`echo "$1 - $2 == 0.0"|bc -l`
if [ ${close_slippaged} -eq 1 ];then
echo "$1 equal $2"
exit;
fi
十四、字符编码转换
title=`echo "${title}" | iconv -f gbk -t utf8`
十五、批量注释
:<<MULTILINECOMMENT
...注释的内容
...注释的内容
MULTILINECOMMENT
这里的MULTILINECOMMENT可以随意取名
十六、文件内容反转
111.dat内容为
abc
def
ghi
tac 1111.dat > 222.dat
则222.dat内容为
ghi
def
abc
十七、大文件分割为小文件
split -l 20000 sourcefile.dat smallfile
将文件sourcefile.dat内容分割为每个文件最多20000 行的小文件,文件名以smallfile开头
十八、计算文件行数
wc -l filename
十九、列出目录下所有文件的文件名
files=`ls -l | grep "smallfile" | awk '{print $NF}'`
二十、杀掉包含某个关键字的所有进程
ps -ef|grep “keyword”|grep -v grep|cut -c 9-15|xargs kill -9