文本处理工具
- 各种文本工具、分析、统计文本
- grep
- 正则表达式
- 扩展正则表达式
抽取文本的工具
文本内容:less和cat
文件截取:head和tail
按列抽取:cat
按关键字抽取:grep
文件内容查看
- 文件查看命令:
- cat nl tac rev
cat [OPTION]...[FILE]...
-E:显示行结束 $
-n:显示出每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行
nl 加行号
tac 将行倒序
rev 将同一行倒序显示
-
- 查看非文本命令(二进制):
- hexdump od xxd
hexdump -C
od
xxd
-
- 分页查看文件内容:
- more less
more:分页查看文件
more[OPTION...]FILE
-d:显示翻页及退出提示
less:一页一页地查看文件或STDIN输出
查看时有用的命令包括:
/文件搜索 文本
n/N 跳到下一个 或者上一个匹配
less 命令是man命令使用的分页器
- 显示文本前或后行内容:
- head tail tailf
head [OPTION...]FILE
-cN 指定获取前N字节
-nN 指定获取前N行
-N 指定行数
例:cat /dev/urandom |tr -dc '[:alnum:]' |head -c12
生成随机字符串
- tail [OPTION]...[FILE]...
-cN 指定获取后N字节
-nN 指定获取前N行
-N 指定行数
-f 跟踪显示文件呢fd(文件描述符)新追加的内容,常用于日志监控
相当于 --follow=name--retry
-F 跟踪文件名,相当于--follow=name--retry
tailf 类似于tail -f,当文件不增长时并不访问文件
- 按列抽取文本cut和合并文件paste
cut [OPTION]...[FILE]...
-d delimiter:指明分隔符,默认tab
-f fileds:
N:第N个字段
N,N[,N]:离散的多个字段,例如1,3,6
N-N:连续的多个字段,例如1-6
混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符
例:cut -d: -f1,3 /etc/passwd
取出/etc/passwd的用户名和UID
df|cut -c45-47
取出磁盘空间利用率
ifconfig ens33 | head -2 | tail -l|tr -s ' '|cut -d' ' -f3
取ifconfig的ip地址
- 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
2分析文本的工具
- 文本数据统计:wc
- 整理文本:sort
- 比较文件:diff和patch
2.1收集文本统计数据wc
计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行
wc story.txt
39 237 1901 story.txt
行数 字数 字节数
常用选项:
-l 只计数行数
-w 只计数单词总数
-c 只计数字节数
-m 只计数字节总数
-L 显示文件中最长行的长度
2.2文本排序sort
把整理过的文本显示在STDOUT,不改变原始文件
sort [options]file(s)
常用选项:
-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique)删除输出中的重复行
-t c 选项使用c作为字段界定符
-k X 选项按照使用c字符分割的X列来整理能够使用多次
例: seq 10 |sort -R|head -1
2.3 唯一 uniq
uniq命令:从输入中删除前后相接的重复的行
uniq[OPTION]...[FILE]...
-c:显示每行重复出现的次数
-d: 仅显示重复的行
-u: 仅显示不曾重复的行
注:连续且完全相同方为重复
常和sort命令一起配合使用:
sort userlist.txt | uniq -c
lastb -f file|tr -s " "|cut -d" " -f3|sort|uniq -c|sort -nr|head
检索服务器访问量
2.4 比较文件 diff
比较两个文件之间的区别
diff foo.conf foo2.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
面试题:取出两个不同目录中相同的文件列表:
方法一:
[root@centos7 ~]#ls /root > /tmp/root.log
[root@centos7 ~]#ls /data > /tmp/data.log
[root@centos7 data]#grep -vf /tmp/data.log /tmp/root.log
方法二:
[root@centos7 ~]#sort /tmp/data.log /tmp/root.log | uniq -u
方法三:
[root@centos7 ~]#( ls /root ;ls /data ) | sort |uniq -u