一起学Shell之(四)文本处理以及管道

 

文本处理工具

排序文本:sort
解释:将输入看作具有多条记录的数据流,而记录是由可变宽度的字段组成,记录是以换行字符作定界,字段的定界符则是定字符或者用户指定的单个字符,
 
用法:将输入行按键值字段与数据类型选项以及locale排序。
语法:sort [options..] [file(s)]
主要选项:
-b:忽略开头的空白。
-d:字典顺序
-r:倒序
-o:输出到指定文件
-n:以整数类型作比较
 
ASCII顺序排序
 
-t char 
解释:以单个字符char作为默认的字段分隔字符,取代默认的空白字符。
行为模式:sort读取指定文件否则标准输入
 
排序规则:
cut -fl afile |od -a -b
-a:ASSII
 
-k 选项后面接着一个字段编号,或者是一对数类型。
b 忽略开头的空白
d 字典顺序
f 不区分字母大小写
g 以一般的符号数进行比较,只适用于GUN版本
i 忽略无法打印的字符
n 以整数进行比较
r 位置倒序
 
sort -t: -k3nr /etc/passwd 
解释:以:为分隔符,查找第三个并以倒序排列。
 
-u 仅输出唯一的记录
 
文本块排序:
sort并不稳定
 
sort是非常重要的命令
 
册除重复:sort -u 这个是根据匹配的键值。
非匹配的记录:uniq
 
一般用法:sort....|uniq|...
主要选项:
-c 每个输出行之前加上该行重复的次数
-d 公显示重复的行
-u 显示复制的行
 
注:默认是显示唯一的,取重复的一行。
 
作用是册除连续的两行,一般要先排序。参照一般用法。
 
重新格式化段落:fmt
常用选项:
-s 权切到较长的行,但不会将短行结合成较长的行
-w n 则设置输出行宽度为n个字符(默认通常在75个左右)
 
/usr/share/dict/word 英文字典位置
 
用途:一般查看文件
 
计算行数、字数、字符数:WC
-c 字节数
-l 行数
-w 字数
用法:wc [options...] [file1] [file2]
 
 
获取开头几行或结尾几行:
head -n n file
awk 'FNR<=n' file
sed -e nq file
 
结尾
tail -n n  file
 
重要选项:
-f 进入无限的循环之中
 
file  [file]
string  [file]
 
煮酒品茶:风格有很大的改变,没有加很繁琐的代码,做一个笔记篇,自己翻起来也是只有重要的文字,能一目了然。
 
小结:
sort fmt uniq head tail wc file sering 
 
管理的神奇魔力
 
Unix工具使用原则:想清楚这个问题该如何划分为更简单的工作,每个部分是不是已有现成的工具能解决,还是你可以写几行Shell程序或使用脚本语言就能马上解决。
 
/etc/passwd 7个字段:
用户名称、是否加密、用户ID、组ID、用户姓名、根目录、登陆的Shell
 
提取字段用:awk 与cut 如提取第五个字段分别是:
... |awk -F: '{print $5}' | ....
... |cut -d: -f5 | ...
 
其实上一节学awk与cut时都讲过了。
 
问题:具有10个字母的单词,以ab开头,但第七个字符不是x就是z。
想:肯定是先找字典文件然后用正则整出来。所以我写的是。
 
#cat /usr/share/dict/words |grep '^[ab]......[xz]...$' 
解释:查找以a或b开头的,第七个字母是xz的,第十个字母是任意字符结尾的。
 
小结:原书中很多东西我省了,需要的直接上原书瞧瞧。一个实例,但管道从左至右吧。




本文转自 煮酒品茶 51CTO博客,原文链接:http://blog.51cto.com/cwtea/855587,如需转载请自行联系原作者

上一篇:[数据恢复答疑]如何为IBM AIX的数据卷做完整镜像?


下一篇:Pushlet 性能测试计划v1预览