Linux开发环境及应用-第一周-文本文件的处理
介绍Linux中的文本信息,以及学习文本文件处理的相关命令。
Linux中的文本信息
主要分为以下几类:
- C语言,Java语言等编程文件的源程序文本文件
- 文本格式的数据文件
- 文本格式的文字信息
- 系统配置信息 如/etc下的配置文件
- 程序的输出
文本型网络协议
因特网大部分传输层以上的协议是文本型协议
例如:
- 会话层协议:HTTP,POP3,SMTP,IMAP
- 表示层协议:HTML,XML,MIME,JSON
文本文件处理常用命令
可以使用重定向机制和管道机制,把多个命令组合使用。
Linux中的文本文件处理命令的特点:
- 不指定处理对象文件名时,从标准输入获得数据
- 指定处理对象文件名时。从文件中获取数据
- 多数命令可以指定多个文件,常结合shell的文件通配符使用
- 处理结果在标准输出显示
常用的文本文件处理命令有:
- more/less:逐屏显示文件内容
- cat、od:列出文件内容
- head、tail:显示文件的头部、尾部
- tee:三通
- wc:字计数
- sort:排序
- tr:翻译字符(替换字符)
- uniq:筛选重复行
more与less
more使用方法举例:
more shudu.c
指定一个文件more *.[ch]
指定多个文件ls -l | more
不指定文件,从标准输入获取,这里利用管道把ls -l
的标准输出重定向到more
的标准输入
输出满屏后,在more中使用的指令:
- 空格 显示下一屏
- 回车 向上滚一行,也就是把下一行滚动上来
- q quit,退出程序
- /pattern 根据正则表达式搜索字符串
- / 继续查找要搜索的字符串
- h help,帮助信息
- Ctrl+L 屏幕刷新
less命令用法与more类似,增强的功能有:
- 使用键盘的上下方向键,或者j,k键来滚动一行
- 用PgUp和PgDn按键翻页
- 用Home键翻到第一页,或者用End键翻到最后一页
more和less都可以同时处理多个文件
cat与od
cat命名来源于英文concatenate——串结,查字典查到意思是“把 (一系列事件、事情等)联系起来”。这个命令用于打印文件内容,选项-n可以显示行号。
od octal dump 逐字节打印。常用选项有:
- -c 按照字符打印,如果这个字节为ascii码就显示为对应的字符,字符如果不可打印就显示为八进制码
- -t c 同-c选项
- -t x1 每一字节不可见字符显示为十六进制码
- -t d1 每一字节不可见字符显示为十进制码
- -t u1 每一字节不可见字符显示为无符号的十进制码
cat和od命令都可以同时处理多个文件
head与tail
head显示文件内容前10行,tail显示文件内容最后10行,-n选项可以指定显示的行数。
一些用法:
head -n 15 ab.c
显示文件ab.c的前15行head -n -20 msg.c
除了文件msg.c尾部20行,显示其余部分tail -n +20 msg.c
除了文件msg.c头部20行,显示其余部分tail -f debug.txt
实时打印文件尾部被追加的内容
head和tail命令都可以同时处理多个文件
tee
tee命令将从标准输入得到的数据抄送到标准输出显示,与此同时,把数据存入磁盘文件中,也可以同时写入多个文件。
用法举例:
$ vim 1.txt | tee /dev/pts/1
/dev/pts/1
是一个终端设备文件,这条命令使用vim编辑文件1.txt,并同时显示在/dev/pts/1
终端的屏幕上。
wc
wc命令的功能主要是统计文件行数,单词数,字符数。
文件shudu.c有240行,576个单词,5264个字符:
$ wc shudu.c
240 576 5264 shudu.c
使用选项-l,只列出行数:
$ wc -l shudu.c
240 shudu.c
当同时处理多个文件的时候,还列出一个合计:
$ wc shudu.c arg.c
240 576 5264 shudu.c
9 24 153 arg.c
249 600 5417 total
结合管道和ps命令,查看系统所有进程的个数
$ ps -ef | wc -l
166
sort
sort命令按照字符串排序,每一行为一个字符串,默认为升序。
文件test.txt内容是:
$ cat test.txt
aasd
zxcaw
456
1234
as
用sort排序:
$ sort test.txt
1234
456
aasd
as
zxcaw
使用-n选项,对数字按照算术值大小排序,而不是按照字符串比较规则排序。
$ sort test.txt -n
aasd
as
zxcaw
456
1234
更多选项可以用man命令查看
tr
基本用法:tr string1 string2
把标准输入拷贝到标准输出,string1中出现的字符替换为string2中的对应字符。
把前面提到的test.txt文件中的字符转换成大写:
$ cat test.txt | tr axcwdzs 'AXCWDZS'
AASD
ZXCAW
456
1234
AS
或者直接使用[]指定一个集合:
$ cat test.txt | tr '[a-z]' '[A-Z]'
AASD
ZXCAW
456
1234
AS
可以用\
加一个八进制数值来表示一个字符,下面是把字符1
换成换行符(\012
)
$ cat test.txt | tr '1' '\012'
aasd
zxcaw
456
234
as
uniq
uniq命令用与筛选文件中重复的行,重复的行是指连续的、相同的行。
与大部分命令不同,这个命令最多指定两个文件,第一个文件为输入文件,第二个文件为输出文件。
现有name.txt文件,内容如下:
$ cat name.txt
feather
feather
Lee
lee
feather
Linux
不带选项运行uniq命令,打印没有重复的行和有重复的行,重复的行只打印一次
$ uniq name.txt
feather
Lee
lee
feather
Linux
使用-u (uniqe)选项,打印没有重复的行
$ uniq -u name.txt
Lee
lee
feather
Linux
使用-d (duplicated)选项,打印有重复的行,重复的行只打印一次
$ uniq -d name.txt
feather
使用-c选项,统计每行的重复次数
$ uniq -c name.txt
2 feather
1 Lee
1 lee
1 feather
1 Linux
注意:重复的行是指连续的、相同的行