文本处理工具
抽取文本的工具
文件内容:less和cat
文件截取:head和tail
按列抽取:cut
按关键字抽取:grep
文件查看
文件查看命令:cat, tac,rev
cat [OPTION]... [FILE]...
-E: 显示行结束符$
-n: 对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
tac:行的反向显示
rev:列的反向显示
nl:加行号,空行不加行号。
分页查看文件内容
more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文本搜索文本
n/N跳到下一个或上一个匹配
less命令是man命令使用的分页器
显示文本前或后行内容
head [OPTION]... [FILE]...
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#:指定行数
tail [OPTION]... [FILE]...
-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:
-f: 跟踪显示文件fd新追加的内容,常用日志监控
相当于--follow=descriptor
-F: 跟踪文件名,相当于—follow=name --retry(文件没了就提示,小f不提示)
tailf类似tail –f,当文件不增长时并不访问文件(节省资源)
[root@centos7 /dev]#tail -f /app/a -n0 &
&后台运行实时观察a文件的内容变化,-n0如果有新行就出现,旧行不要。
fg和bg:前台和后台运行程序
按列抽取文本cut和合并文件paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,默认tab键作为分隔符。
-f FILEDS:
#: 第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段, 例如1-6
混合使用:1-3,7
-c按字符切割
--output-delimiter=STRING指定输出分隔符
[root@centos7 ~]#cut -d: -f1,3 /etc/passwd root:0 bin:1 daemon:2
以:为分隔符,去除其中的用户名和uid。
[root@centos7 ~]#cut -d: -f1,3 --output-delimiter=* /etc/passwd root*0 bin*1 daemon*2 adm*3 lp*4
指定输出的分隔符为*
cut和paste
显示文件或STDIN数据的指定列
cut-d:-f1/etc/passwd
cat /etc/passwd|cut-d:-f7
cut-c2-5/usr/share/dict/words
paste 合并两个文件同行号的列到一行
paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示
paste f1 f2
paste -s f1 f2
分析文本的工具
文本数据统计:wc
整理文本:sort
比较文件:diff和patch
收集文本统计数据wc
计数单词总数、行总数、字节总数和字符总数(linux中一个汉字三个字节,一个字母一个字节)
字符和字节是两个概念,字节是磁盘上占用的空间大小
可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
常用选项
-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度
文本排序sort
把整理过的文本显示在STDOUT,不改变原始文件
sort[options]file(s)
常用选项
-r执行反方向(由上至下)整理
-n执行按数字大小整理(有小到大)
-f选项忽略(fold)字符串中的字符大小写
-u选项(独特,unique)删除输出中的重复行
-t c选项使用c做为字段界定符
-k X选项按照使用c字符分隔的X列来整理能够使用多次
uniq
uniq命令:从输入中删除前后相接的重复的行
uniq[OPTION]... [FILE]...
-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行
连续且完全相同方为重复
常和sort 命令一起配合使用:
sort userlist.txt | uniq-c
比较文件
比较两个文件之间的区别
diff:比较两个文件的内容,并不比较两个文件的属性
difffoo.conffoo2.conf
5c5
< use_widgets=no
---
> use_widgets=yes
注明第5行有区别(改变)
复制对文件改变patch
diff命令的输出被保存在一种叫做“补丁”的文件中
使用-u选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
patch复制在其它文件中进行的改变(要谨慎使用)
适用-b选项来自动备份改变了的文件
$diff -u foo.conf foo2.conf>foo.patch
$patch -b foo.conf foo.patch
[root@centos7 /app]#cp /etc/fstab f3 [root@centos7 /app]#cp /etc/fstab f4 [root@centos7 /app]#echo a >>f4 [root@centos7 /app]#diff f3 f4 -u >f3f4.diff [root@centos7 /app]#ll total 12 -rw-r--r--. 1 root root 595 Nov 21 09:14 f3 -rw-r--r--. 1 root root 392 Nov 21 09:15 f3f4.diff -rw-r--r--. 1 root root 597 Nov 21 09:14 f4 [root@centos7 /app]#rm -f f4 [root@centos7 /app]#patch -b f3 f3f4.diff patching file f3 [root@centos7 /app]#ll total 12 -rw-r--r--. 1 root root 597 Nov 21 09:15 f3 -rw-r--r--. 1 root root 392 Nov 21 09:15 f3f4.diff -rw-r--r--. 1 root root 595 Nov 21 09:14 f3.orig
创建f3、f4将两文件不同结果输出到文件f3f4.diff中删除f4,使用patch找回f4,
但找回的文件其实是f3变成了f4,f3实际为备份的f3.orig,通过文件大小也能对比出来。