10 文本分析处理命令
cut:显示切割的行数据
-f: 选择显示的列
-s: 不显示没有分隔符的行
-d:自定义分隔符
sort:排序文件的行
-n: 按数值排序
-r:倒序
-t:自定义分隔符
-k:选择排序列
-u:合并相同行
-f:忽略大小写
wc:统计单词,word count
sed:行编辑器 --(vi:全屏编辑器)
sed [options] 'Address Command' file ...
[options]
-n 静默模式,不再默认显示模式空间中的内容
-i 直接修改原文件
-e SCRIPT 可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r 表示使用扩展正则表达式
Command
d 删除符合条件的行
p 复制符合条件的行
a \string 在指定的行后面追加新行,内容为string。\n可以用于换行
i \string 在指定的行前面添加新行,内容为string。
r FILE 将指定的文件的内容添加至符合条件的行处
w FILE 将地址指定的范围内的行另存至指定的文件中
s/pattern/string/修饰符 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
g:行内全局替换
i:忽略字符大小写
s///:s###,s@@@
\(\),\1,\2
Address
可以没有
给定范围
查找指定行/str/
num=88
sed "s/\(IPADDR=\(\([0-9]\|[1-9][0-9]\|1[0-9][0-9]\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\).*/\1$num/" -i ifcfg-eth0
awk文本分析工具
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':' '{print $1 "\t" $7}' passwd
awk -F':' 'BEGIN{ print "name\tshell"}{print $1 "\t" $7}END{print "blue\t/bin/nosh"}' passwd
搜索/etc/passwd有root关键字的所有行
awk '/root/ {print $0}' passwd
统计/etc/passwd文件中,每行的行号,每行的列数,对应的完整行内容
awk -F':' '{print NR "\t" NF "\t" $0}' passwd
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