Linux笔记04:文本文件及处理工具

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-d
  • cat 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)计数同样的行出现几次
使用搜索:谷歌必应百度