一、 awk
命令格式:
awk ‘BEGIN{commands} pattern {commands} END{commands}’file
工作方式:
1.执行BEGIN{commands}语句块中语句,可选的语句块
2.从文件或者stdin中读取一行,然后执行{commands},重复这个过程,直到文件全部被读取完
3.当读至输入流末尾是,执行END{commands}语句块
特殊变量:
FILENAME:awk浏览的文件名
NR:记录数量,执行过程中对应于当前行号
NF:字段数量,执行过程中对应于当前行的字段数
FS:设置分隔符,命令行 -F
$0:执行过程中当前行的文本内容
$1:第一个字段的文本内容
$2:第二个字段的文本内容,以此类推
print&printf打印输出的函数
print的参数是以逗号进行分隔时,参数打印时则以空格作为定界符,awk的print语句中,双引号是被当做拼接操作符使用的
printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。
流程控制语句
if(condition)else{}
while(){}
do{}while()
for(;;)等
内建字符串控制函数:
1.length(string):返回字符串的长度
2.index(string,search_string):返回search_string在字符串中出现的位置
3.substr(string,start_pos,end-pos):在字符串中从start-pos开始到end-pos位置,生成子串
4.split(string,array,delimiter):用delimiter生成一个字符串列表,并将该列表存入数组,delimiter默认使用当前FS值。
5.sub(regex,replace_str,string):将正则表达式匹配到的第一处内容替换成replace_str
6.gsub(regex,replace_str,string):替换正则表达式匹配到所有的内容
7.match(regex,string):检测正则表达式是否能够匹配字符串
应用:
1.从文件或者stdin中读取一行,循环执行{commands},直到读完
echo "aXbX cXdXe a;b;cX d;e" | awk -F"[X|;| ]+" ‘BEGIN{print "begin:"} {for(i=1;i<=NF;++i){++S[$i];printf("$%d=%s\n",i,$i)}} END {print "end:"; for(i in S) print i, S[i]}‘
2.split函数
二、sed
sed语法格式:
sed[options ]‘command’ file(s)
sed常用选项:
-n:只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e:组合多个sed命令
-f:执行 filename 内的sed 动作
-r:sed 的动作支援的是延伸型正规表示法的语法
-i:直接修改读取的文件内容,而不是屏幕输出
sed常用命令:
a:追加 sed ‘a xxx’ file 每一行后面都追加xxxx sed‘$a xxx’file 最后一行追加
i:插入 sed ‘i xxx’file 每一行前面插入xxx
c:取代 sed ‘2c xxx’file 第二行用xxx取代
d:删除 sed ‘/^$/d’file 删除空白行 sed ‘1,5d’file 删除第1-5行
s:替换 sed ‘s/pattern/replace_str/g’file /g意味sed会替换每一处匹配,否则是第一处匹配
&:标记匹配样式的字符串,可以在替换字符串时使用已匹配的内容
\1 or \2:第1个or第2个匹配的字符串
应用:
1.&:标记匹配样式的字符串,可以在替换字符串时使用已匹配的内容
2.\1 or \2:第1个or第2个匹配的字符串,\(pattern\)用于匹配子串,模式被包括在使用斜线转义过的()中
3.使用管道组合多个sed命令
sed ‘expression’ | sed ‘expression’
sed ‘expression;expressiong’
sed -e ‘expression’ -e ‘expression’
三、tr---translate转换
tr语法格式:
tr [options] set1 set2
原理:通过集合映射的概念,将set1映射成set2
-常用参数
-d:指定需要被删除的字符集合
-c:使用集合的补集
tr –c set1 set2 使用set1的补集,即不包含set1的所有字符
-s:压缩输入中重复的字符,将连续重复的字符合并为一个字符
应用:
1.加密解密
2.数字文件相加
将文件中的\n转换成+,利用$[ operation ]执行算术运算
3.tr集合列表
tr [:class:] [:class:]
alnum:字母和数字 alpha:字母
digit:数字 cntrl:控制(非打印)字符
lower:小写字母 upper:大写字母
graph:图形字符 punct:标点符号
space:空白字符 xdigit:十六进制字符
四、find
find:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应操作
常用参数
-print:打印出批判文件的文件名(路径),\n是输出文件的分割符
-print0:\0(null)作为输出文件的分割符,xargs -0
-name:文件名必需匹配的字符串,\(-name“xx”-o -name“xx”\) 匹配多个字符串
-iname:忽略字母大小写
-path:匹配文件路径
-type:文件类型过滤
-size:文件大小搜索
-delete:删除查找到的文件
-perm:匹配具有特定权限值的文件
-newer:指定一个用于比较时间戳的参考文件,匹配出参考文件更新的所有文件
-user:制定某用户文件
-exec:借助-exec与其他命令进行结合,命令格式为:command {} \; 注意{}和\之间的空格
-ok:和-exec的作用相同,只是在安全模式下进行操作,按y键yes,按n键no
-atime:访问时间,用户最近一次访问文件的时间,单位:天 -amin 单位:分
-mtime:修改时间,文件内容最后一次被修改的时间,单位:天 –mmin 单位:分
-ctime:文件(例如权限或所有权)最后一次改变的时间,单位:天 –cmin单位:分
-表示小于(最近) +表示大于(超过) 没有- 或+ 表示数字当天
!:表示不匹配规则的文件
应用:
1.-exec:借助-exec与其他命令进行结合,命令格式为:command {} \; 注意{}和\之间的空格
五、xargs
xargs:构造命令行参数并运行命令
同管道的区别
管道是实现将前面的标准输出作为后面的标准输入
xargs是实现将标准输入作为命令的参数
xargs的默认命令是echo,默认定界符是空格(空白字符)
这意味着传递给xargs的输入如果包含换行和空白字符,通过xargs的处理,换行和空白将被空格取代,因此xargs是构建单行命令的重要组件之一
常用参数
-n number :多行输出,多个参数
-d X:自定义定界符
-I | -i replace_str:在xargs扩展时replace_str会被替换为从标准输入的每一行参数
-L number :标准输入读取非空number行作为参数,-L 1 等价于-I
-p:询问是否运行
-t:启用跟踪方式
-s size:设置命令行的最大字节数
-x:如果有任何 命令行大于 -s Size 标志指定的字节数,停止运行 xargs 命令
应用:
1.-n number:设置命令的参数个数
2.-I replace_str:命令参数替换
3.xargs和find算是一对死党
find的-print0和xargs的-0
ps:只要是把find的输出结果作为xargs的输入,就必须将-print0与find结合使用,以字符null(\0)来分割,同时,xargs -0将null作为定界符