Linux文本处理(一)

时间:2022-09-12 10:21:58

转载请注明出处:http://blog.csdn.net/u012842205/article/details/79523990


一、简单说明

    我们平时在电脑上写文档时,总会对文档中的文本进行增删改查操作。比如:搜索,替换某个文件中的关键字;查找路径下所有存在关键字的文件;计算文件中的行数,单词数;查找含有某个关键字的文件名。编辑某个文件。

    文本处理指对文本文件进行必要的增删查改操作。在Windows下我们总使用资源管理器、一些文本编辑器(

notepad++、sublime等),或者功能更强大的Office、WPS等,来完成这些操作。

    而在Linux平台下,文本处理多是使用一些命令集或者文本编辑器完成。也有这个平台下的WPSOffice。在Linux平台下,因为很多数据都是直接以文本文件的形式存储,所以它的文本处理工具非常丰富,功能也非常强大。

    Linux工具通常功能比较单一,其理念是追求小巧精悍。打个比方,一个文本查找工具,仅仅只有查找的功能,而不能用来统计单词数。统计单词数由另一个工具完成。也就是说,在这个平台下,文本处理所涉及涉及的工具非常多,且需要配置多个工具协同完成。文本文件处理在Linux上最常见的使用,大概就是修改配置文件,查找文件中的关键字。

    本文只对于文本文件的处理,用Office或者WPS等这类有自己文件存储格式的强大工具,不涉及说明。

二、Linux下常用文本处理思路

(1)工具

    有的文本处理工作非常简单,只需要单一工具即可完成。

(2)多个工具协同

    若处理比较复杂,比如将多个输入文件中的ERROR日志过滤出来,并保存到另一个文件中。

(3)vim

    vim是一款非常强大的命令行文本编辑器,几乎可以完成所有的文本处理操作。

(4)编写Shell脚本

    有时候文本处理操作不能一个工具完成,需要多个工具,且逻辑比较复杂,可以考虑编写Shell脚本,将处理过程直接写在代码中。且脚本下次也可以重复使用。

三、一些简单工具

    本文列举了一些常用的文本处理工具,并附带一些简单用例。真正完成一个复杂的文本处理操作,有可能要结合多个工具,用重定向等方法完成。

1、wc

    此工具是Word Counter的缩写,意思是单词计数器。用来计算某个文本文件中的单词数,但不局限于单词数,还可以统计文件的行数、字节数。调用格式如下:

wc [OPTION]... [FILE]...

    第一部分是一些选项,第二部分是文件列表。两者都可以省略,若省略第二部分则标示文件内容从标准输入流(STDIN)获取。

例1:输入一个文本文件,不指定任何选项。

wc file_name

其输出结果如下:

24  62 295 file_name

各列分别代表:行数(以\n结尾)、单词数(以空格隔开)、字节数、文件名。

例2:输入一个100行的文本文件,输出此文件行数

wc -l 100line_file

其输出结果如下:

100 100line_file

例3:输入一个文本文件,输出此文件字节数

wc -c 100line_file

输出结果如下:

1400 ./100line_file

例4:输入一个文本文件,输出此文件单词数

wc -w 100line_file

输出结果如下:

245 ./100line_file

2、head

    打印出输入文件的起始部分,即前几行。此命令好处来自大文件。例如:长期运行的服务器程序,其日志文件非常大,动辄几百兆上G,这时候若想查看文件前1000行,若还想使用vim打开,不仅耗时间,而且占用内存非常严重。使用head工具,只需将前1000行数据加载到内存,且耗时更少。

head [OPTION]... [FILE]...

例1:输入一个文本文件,不指定任何选项。

head file_name

输出的是名为file_name的文件起始10行内容。

例2:输入一个文本文件,显示前100行内容。

head -n 100 file_name

例3:输入一个文件,指定显示前100字节内容。

head -c 100 file_name

例4:输入多个文本文件,分别输出每个文本文件前100行内容。

head -n 100 -v ./file1 ./file2 ./file3

head将会顺序打印出每个文件前100行内容,这里-v选项不带参数,打印出文件标题信息,此标题以下直到下一个标题出现前的内容都属于标题指示的文件。

3、tail

    有打印文件开头内容的head工具,就有打印文件末尾内容的tail工具。tail工具的调用方法同head。此处只讲解一个重要选项-f。

    当某个文件正被某个进程写入内容时,文件内容在不断增加。这时候可以使用tail工具监视这个文件,只要新追加了内容到此文件,tail将滚动输出此文件的新增内容到标准输出上。注意,在监视过程中,tail将阻塞命令行提示符,若想退出监视,使用ctrl + c即可。

例1:输入某个进程的日志文件,tail监视此文件,将新增内容输出到控制台。

tail -f ./out.log

4、cat

    此工具将多个输入文件的内容顺序拼接并输出到标准输出流。默认若什么都不输入,则从标准输入流接收内容并输出到标准输出流。调用格式如下:

cat     [OPTION]...     [FILE]...

例1:输入三个文本文件,将文本文件顺序拼接并输出到标准输出流。

cat ./file1 ./file2 ./file3

例2:从标准输入流获取输入并输出到文件。

cat - >> ./output_file
或者:
cat >> ./output_file

注意:输入结束后可以使用ctrl + c或者ctrl + d结束输入,cat将返回控制权。