Linux中的文本信息
- 文本文件
- C语言,Java语言等编程文件的源程序文件
- 文本格式的数据文件
- 文本格式的文字信息(使用手册等)
- 程序输出
- 系统配置信息:
/etc
下的配置文件(功能类似 Windows 的注册表) - 文本型网络协议
- 因特网大部分传输层以上的协议是文本型协议
- 会话层协议:HTTP(网页传输);POP3,SMTP,IMAP(电子邮件)
- 表示层协议:HTML(网页页面);XML,JSON(对象状态);MIME(电子邮件)
- 文本文件处理的命令
- Linux提供大量的文本文件处理的命令
- 多数命令都有复杂的选项
进程的标准输入/输出
- 进程的基本概念
- 进程:简单理解为程序从开始运行到运行结束
- 程序:磁盘上的可执行文件
- 进程的生命周期
- 进程的输入输出
- 标准输入stdin
- 标准输出stdout
重定向与管道
- 重定向机制:将标准输入/输出重新定向到文件中
- 输出重定向
ls –l > filelist.txt
- 追加输出重定向:
>>
- 输入重定向
sort < filelist.txt
- 输出重定向
- 管道机制:连接两个命令,前一个命令的输出作为后一个命令的输入
ls –l | sort
- 重定向机制和管道机制的重要性:组合多个命令,完成重要的功能。
文本文件处理命令的特点
特点:
- 不指定处理对象文件名时,从标准输入获得数据
- 指定处理对象文件名时,从文件中获取数据
- 多数命令可以指定多个文件
- 处理结果在标准输出显示
这样考虑的因素:
- 利用标准输入/标准输出
- shell的文件通配符 -> 处理多个文件
- 输入输出重定向
- 管道
灵活性:工具命令的组合
-
Linux 倾向于提供独立的多个精巧的工具命令,数据格式为文本信息
-
鼓励使用重定向或管道机制将多个工具命令组合在一起,提供灵活的功能
-
应用系统设计时,也应该考虑到这些特点
例如:数据库内容的展示,直接输出多列文本,考虑到各种工具软件的使用
文本文件读取与处理的命令
more/less:逐屏显示文件
历史 more 最先由BSD UNIX开发;less 在Linux上广泛使用
more <文件名>
指定一个文件more *.[ch]
指定多个文件(通配符)ls -l | more
指定0个文件(常用,显示一屏就停下来)
more
满屏后,显示–more–或--more–(15%),可以使用more命令:
- 空格:显示下一屏
- 回车:上滚一行,当所感兴趣的段落内容正好处于当前屏的尾部,另有一部分在下一页中时,可以连续按回车,将感兴趣的部分滚动上来
- q:(quit)退出程序,后面的内容不再显示
- /pattern:搜索指定模式的字符串,模式描述用正则表达式
- /:继续查找指定模式的字符串
- h:(Help)帮助信息。打印more命令的所有功能列表
- Ctrl-L:屏幕刷新
less
Linux系统中的命令less
less is more
- 回退浏览的功能更强
- 可直接使键盘的上下箭头键,或者j,k,类似vi的光标定位键,以及PgUp,PgDn,Home,End键
- 有的Unix系统不提供less命令,但是可利用more命令的增强功能
cat与od:列出文件内容
基本功能与命名
- cat concatenate 串结,文本格式打印(选项-n:行号)
- od octal dump 逐字节打印
- -c:逐字符方式打印文件,遇到不可打印字符打印编码
- -t c:按字符打印
- -t x1:以一个字节为单位打印十六进制
- -t d1:以一个字节为单位打印十进制(超过128显示负数)
- -t u1:以一个字节为单位打印十进制(无符号整数)
举例
cat tryl.c
命令行参数1个cat –n shudu.c
选项-n:行号cat tryl.c tryx.c try.h
命令行参数3个cat >try
命令行参数0个,从stdin获取数据,直到ctrl-dcat tryl.c try2.c try.h > trysrc
cat makefile *.[ch] > src
od –t x1 x.dat
以十六进制打印文件x.dat各字节od –t x1 x.dat | more
以十六进制打印文件x.dat各字节od –c /bin/bash
逐字符方式打印文件,遇到不可打印字符打印编码echo abcdABCD | od –t x1
十六进制显示字符的ASCII码
head与tail:显示文件的头部或者尾部
默认只选择10行,-n选项可以选择行数
head –n 15 ab.c
显示文件ab.c中前15行head –n 23 a.c b.c c.c | more
显示三个文件各自的前23行,共显示69行tail –n 40 liu.mail
head –n -20 msg.c
除去文件尾部20行其余均算“头”tail –n +20 msg.c
除去文件头部20行其余均算作“尾”tail -f debug.txt
实时打印文件尾部被追加的内容(选项-f:forever)netstat -s -p tcp | head
ls -s | sort | head –n 20
最大的20个文件
tee:三通
功能:将从标准输入stdin得到的数据抄送到标准输出stdout显示,同时存入磁盘文件中
应用举例:./myap | tee myap.log
wc:字计数(word count)
- 列出文件中一共有多少行,有多少个单词,多少字符
- 当指定的文件数大于1时,最后还列出一个合计
- 常用选项-l:只列出行计数
举例
wc sum.c
(1个文件)wc x.c makefile stat.sh
(多个文件)wc -l *.c makefile start.sh
ps -ef | wc -l
(0个)ps -ef | grep liang | wc -l
(0个)who | wc -l
(0个)
sort:对文件内容排序
sort选项
- -n选项(Numberic):对于数字按照算术值大小排序,而不是按照字符串比较规则,例如123与67
- -k:可以选择行中某一部分作为排序关键字
- -r:以相反的顺序来排序。
- -f:字符串比较时对字母是否区分大小写
- 内排序外排序等算法参数选择(当数据量较大时,性能调优)
举例
sort telno > telno1
ls -s | sort | tail –10
ls -s | sort -n | tail –10
tr:翻译字符
用法:tr string1 string2
把标准输入拷贝到标准输出,string1中出现的字符替换为string2中的对应字符
cat telnos | tr UVX uvx
- 用
[]
指定一个集合
cat report | tr '[a-z]' '[A-Z]'
将小写字母改为大写字母 - 用
\
加三个八进制数字(类似C语言)表示一字符
cat file1 | tr % '\012'
将%改为换行符,注意不要漏掉必需的单引号
uniq:筛选文件中的重复行
uniq options
uniq options input-file
uniq options input-file output-file
重复的行:紧邻的两行内容相同
- -u(uniqe)只保留没有重复的行
- -d(duplicated)只保留有重复的行(但只打印一次)
- 没有以上两个选项,打印没有重复的行和有重复的行(但只打印一次)
- -c(count)计数同样的行出现几次
About this Post
This post is written by Holger, licensed under CC BY-NC 4.0.