最近在写shell脚本,主要工作就是解析配置文件,那么学习sed与awk就在所难免了,另外还系统的看了find命令的使用,现在就将这些成果汇总起来,以便今后参考:
------------------------------------------------------------------
第一部分:find
1)name选项
find ~ -name “*.txt” –print
find . –name “[A-Z]*” –print
2)perm选项
find . –perm 755 -print
3)按更改时间查找
find / -mtime -5 –print //更改时间在五日以内
find / -mtime +3 –print //更改时间在三日之前
4)type选项
find /etc –type d –print //查找/etc目录下所有的目录
find /etc –type l –print //查找/etc目录下所有的符号链接文件
5)使用exec或ok
find . –type f –exec ls –l {} ; //注意{}和;之间有空格
find . -name “*.log” –mtime +5 -exec rm {} ;
第二部分:sed
sed是非交互文本流编辑器,使用sed可以从文件和字符串中抽取所需信息。
1)打印范围
sed –n ‘1,3p’ sed.txt > sed.tmp
sed –n ‘1,$p’ sed.txt > sed.tmp
2)模式查询
sed –n ‘/should/p’ sed.txt //查找should的行
sed –n ‘/should/=’ sed.txt //输出匹配的行号
3)特殊字符查询
sed –n ‘/./’p sed.txt //查找有.的行
4)删除文本
sed ‘1,3d’ sed.txt
sed ‘/should/d’ sed.txt
5)替换文本
sed ‘s/PS/ps/’ sed.txt //替换每行第一个匹配
sed ‘s/PS/ps/g’ sed.txt //全文替换
sed ‘1,3 s/should/SHOULD/g’ sed.txt //指定范围替换
sed ‘1 s/should/SHOULD/g’ sed.txt //指定行替换
6)sed脚本文件
I)含sed命令的脚本
$cat append.sed
#!/bin/sed –f
/should/ a
Just a test.
$chmod +x append.sed
$./append.sed sed.txt
II)不含sed命令脚本
$cat append.sed
/should/ a
Just a test.
$chmod +x append.sed
$sed –f append.sed sed.txt
第三部分:awk
awk 是一种编程语言,对文本和数据进行处理,支持正则表达式,突出特点是对文本列的操作。
1)常见操作
awk ‘{print $1,$3}’ tmp.txt
awk –F ‘:’ ‘{print $1”|”$3}’ tmp.txt //以冒号作为域分割符并且输出的分割符为|
2)打印记录
awk ‘BEGIN {print “Begin -----------------”}
{print $0}’ tmp.txt //打印头
awk ‘BEGIN {print “Begin -----------------”}
{print $0}
END {print” ----------------- End”}’ tmp.txt //打印头尾
3)条件运算符
awk ‘{if ($1~/tomy/) print $0}’ tmp.txt //匹配文本域1为tomy的记录
awk ‘$2==”30” {print $1,”age is 30.”}’ tmp.txt //精确匹配
4)利用正则表达式
awk ‘/[Gg]reen/’ tmp.txt //匹配Green或者green
awk ‘$4~/[Gg]reen/’ tmp.txt
awk ‘$4~/([Gg]reen|[Rr]ed)/’ tmp.txt //或关系匹配
5)使用内置变量
awk ‘{print NF,NR,$0}
END {print FILENAME}’ tmp.txt //NF为列数,NR为行号
6)使用内置字符串函数
awk ‘gsub (/30/,thirty) {print $0}’ tmp.txt //把有30的行中的30改为thirty
awk ‘BEGIN {print split(“123#456#789”,m_array,”#”)}’ //split返回数组m_array的下标数3,m_array取值:m_array[1]为123,m_array[2]为456,m_array[3]为789
7)输出函数printf
awk ‘{printf “%-10s---%s ”,$1,$3}’ tmp.txt //类似C语言printf函数
------------------------------------------------------------------