linux中操作符

 

linux中最为常用的三大文本(grep,cut,sort,sed,awk)处理工具之一,掌握好其用法是很有必要的。

正则表达式匹配操作符

.*          匹配任意字符
\           转义字符
. 	                 匹配任意单个字符
[1249a],[^12],[a-k]  字符序列单字符占位
^                 锚定行首
$                 锚定行尾  技巧:"^$"用于匹配空白行。
\<,\>:\<abc           单词首尾边界
|                   连接操作符
(,)              选择操作符
\n    	     反向引用
?      	匹配0到1次。
*      	匹配0到多次。
+     	匹配1到多次。
{n}   	匹配n次。
{n,}  	匹配n到多次。
{n,m}      匹配n到m次。

grep:

    -E :开启扩展(Extend)的正则表达式。

  -i :忽略大小写(ignore case)。

  -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印。

  -n :显示行号

  -w :被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker

  -c :显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。

  -o :只显示被模式匹配到的字符串。

  --color :将匹配到的内容以颜色高亮显示。

  -A  n:显示匹配到的字符串所在的行及其后n行,after

  -B  n:显示匹配到的字符串所在的行及其前n行,before

  -C  n:显示匹配到的字符串所在的行及其前后各n行,context

 

cut:显示切割的行数据

–f:选择显示的列
–s:不显示没有分隔符的行
–d:自定义分隔符

sort排序文件的行

–n:按数值排序
–r:倒序
–t:自定义分隔符
–k:选择排序列
–u:合并相同行
–f:忽略大小写

sed:

sed:行编辑器

sed [options] 'AddressCommand' file ...
	-n: 静默模式,不再默认显示模式空间中的内容
	-i: 直接修改原文件
	-e SCRIPT -e SCRIPT:可以同时执行多个脚本
	-f /PATH/TO/SED_SCRIPT
	-r: 表示使用扩展正则表达式


sed:行编辑器Command

d: 删除符合条件的行;
p: 显示符合条件的行;
a \string: 在指定的行后面追加新行,内容为string
	\n:可以用于换行
i \string: 在指定的行前面添加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE: 将地址指定的范围内的行另存至指定的文件中; 
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g: 行内全局替换
i: 忽略字符大小写
s///: s###, s@@@	
	\(\), \1, \2


sed:行编辑器Address

可以没有
给定范围
查找指定行/str/


awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F '{pattern + action}' {filenames}
支持自定义分隔符
支持正则表达式匹配
支持自定义变量,数组  a[1]  a[tom]  map(key)
支持内置变量
ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览记录的域的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句,类C语言
if、while、do/while、for、break、continue

只是显示/etc/passwd的账户:CUT
awk -F':' '{print $1}' passwd
只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行开始前添加列名name,shell,在最后一行添加"blue,/bin/nosh"(cut,sed)
awk -F':' 'BEGIN{print "name,shell"} {print $1 "," $7} END{print "blue,/bin/nosh"}' passwd
搜索/etc/passwd有root关键字的所有行
awk  '/root/ { print $0}'   passwd
统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容
统计报表:合计每人 1 月工资, 0 manager 1 worker
Tom  0   2012-12-11      car     3000
John  1   2013-01-13      bike    1000
vivi   1   2013-01-18      car     2800
Tom  0   2013-01-20      car     2500
John  1   2013-01-28      bike    3500
 

awk   '{
split($3,date,"-");
if(date[2]=="01"){
name[$1]+=$5
}
} 
END{
for(i in name){
print i "\t" name[i]}
}'    awk.txt
awk   '{split($3,date,"-");if(date[2]=="01"){name[$1]+=$5;if($2=="0"){role[$1]="M"}else{role[$1]="W"}}} END{for(i in name){print i "\t" name[i]"\t" role[i]}}'    awk.txt 


awk  '{split($3,date,"-");
if(date[2]=="01"){
name[$1]+=$5
}	
} 
END{
for( i in name ){
print i"\t" name[i]
}
}'   
awk.bb

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值