第七章 linux文本处理工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七章 linux文本处理工具相关的知识,希望对你有一定的参考价值。

文本处理工具

抽取文本的工具

文件内容: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,当文件不增长时并不访问文件(节省资源)

[[email protected] /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指定输出分隔符

[[email protected] ~]#cut -d: -f1,3 /etc/passwd

root:0

bin:1

daemon:2

以:为分隔符,去除其中的用户名和uid。

[[email protected] ~]#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

[[email protected] /app]#cp /etc/fstab  f3

[[email protected] /app]#cp /etc/fstab  f4

[[email protected] /app]#echo a >>f4

[[email protected] /app]#diff f3 f4 -u >f3f4.diff

[[email protected] /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

[[email protected] /app]#rm -f f4

[[email protected] /app]#patch -b f3 f3f4.diff

patching file f3

[[email protected] /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,通过文件大小也能对比出来。

以上是关于第七章 linux文本处理工具的主要内容,如果未能解决你的问题,请参考以下文章

异常和TCP通讯

第七章-vim 文本编辑器

tensorflow在文本处理中的使用——词袋

Linux内核分析——第七周学习笔记20135308

Linux学习笔记 第七章 vim高级文本编辑器

linux文本处理工具