您的位置:首页 > 其它

文本处理工具

2019-07-31 19:06 13 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/wdirdo/article/details/97948995

文本处理工具


1、文本内容:cat、more、less…
2、文本截取:head、tail…
3、按列抽取:cut…
4、排序和统计:sort、wc…

1、文本内容:cat、more、less…

1)cat

  • cat - concatenate files…连接文件并打印内容至STDONT
  • cat --help - Usage: cat [OPTION]… [FILE]…
options:
-A:相对于-EvT,显示所有控制符
-n:STDOUT的所有行添加行号
-b:非空行添加行号
-s:压缩STDOUT中的连续空行
-E:显示行尾的$符

example:
[root@centos6 data]#cat -A f1
1$
$
2^Ia^Ib$
$
$
3$

2)tac

  • tac与cat用法功能相同,显示内容区别
tac 与 cat 显示的内容相反,相对于x轴对称

3)rev

  • rev - reverse lines of a file or files反向行…
rev 显示的内容与实际内容关于y轴对称

4)nl

  • nl - number lines of files 文件行数

5)hexdump

  • hexdump - ascii,十进制,十六进制,八进制转储
[root@centos7 tmp]# echo abc > f2
[root@centos7 tmp]# hexdump f2
0000000 6261 0a63
0000004
[root@centos7 tmp]# hexdump -C f2
00000000  61 62 63 0a                 |abc.|
00000004

6)xxd

  • xxd - 创建给定文件或标准输入的十六进制转储
option:
-b 用二进制显示一个bit
-r 还原;十六进制作为输入,二进制作为输出
配合vim编辑修改二进制文件:
①以二进制方式打开文件
vim -b filename
②底行模式利用xxd转化为可读的十六进制
:%!xxd
③插入模式,编辑二进制文件
④底行模式还原回二进制
:%!xxd -r

7)more

  • more - 一次筛选一屏的过滤器
  • -d: 显示翻页及退出提示

8)less

  • less - 比more更强大的过滤器
  • 获取man帮助手册时使用的分页器就是less

2、文本截取:head、tail

1)head

  • head - 打印文件的开始部分至STDOUT
  • Usage: head [OPTION]… [FILE]…
options:
-c:打印前多少字节
-n # | -# :打印前面#行,默认10行

example:
截取随机密码:
[root@centos7 tmp]# cat /dev/urandom | tr -dc [:alnum:] | head -c 12

2)tail

  • tail - 打印文件的末尾部分至STDOUT
  • Usage: tail [OPTION]… [FILE]…
options:
-c:打印末尾最后多少字节
-n # | -# :打印前面#行,默认10行
-f:跟踪的是fd,常用于日志监控
-F:跟踪文件名,相当于--follow=name --retry
tailf:类似tail -f,当文件不增长时并不访问文件
example:
tail -f 跟踪的是fd
[root@centos7 tmp]# ll /proc/`pidof vim`/fd
...(部分显示)找到打开文件的文件描述符(fd)
lrwx------. 1 root root 64 Jul 27 17:29 4 -> /data/tmp/.f2.swp

tail -F 跟踪文件名示例:
-----------------------------------------------------------------
终端/dev/pts/1 显示追踪
[root@centos7 tmp]# tty
/dev/pts/1
[root@centos7 tmp]# tail -F f2
abc
pdd    tail -F 删除正在监控的文件,仍处于监控状态
tail: ‘f2’ has been replaced;  following end of new file
xxd

终端/dev/pts/0 是f2发送改变
[root@centos7 tmp]# tty
/dev/pts/0
[root@centos7 tmp]# echo pdd >>f2
[root@centos7 tmp]# rm -f f2  删除正在监控的文件
[root@centos7 tmp]# echo xxd >> f2 之后创建f2并更新内容
-----------------------------------------------------------------
综上:tail -F 跟踪的是文件名

3、按列抽取:cut

  • cut - 从文件或STDIN中读取内容并截取每行特定的部分打印至STDOUT。
  • Usage: cut OPTION… [FILE]…
option:
-d:指定分隔符,默认tab
-c:以字符为单位进行分割
-b:以字节为单位进行分割
-f FIELD:显示指定的field
--output-delimiter=STRING:指定输出分隔符

4、排序和统计:sort、wc

1)wc

  • wc - 统计文件的行数,单词数,字节数,字符数;支持STDIN
  • wc [OPTION]… [FILE]…
option:
-l:只显示行数
-w:只显示单词数
-c:只显示字节数
-m:只显示字符数
-L:显示文件中最长行的长度
字符与字节的区别:
在UTF-8编码中,一个汉字和一个字母对应字节数不相同
eg:“ 我 ”这个汉字占3个字节,为一个字符

2)sort

  • sort - 将文件内容排序后打印至STDOUT,支持STDIN
  • sort [OPTION]… [FILE]…
option:
-r:输出结果反向打印
-R:随机排序
-t c:使用c做为字段界定符
-k X:按照使用c字符分隔的X列来整理能够使用多次
-n:按照数值大小排序
-f:选项忽略字符串中的大小写
-u:去重行

3)paste

  • paste - 把多个文件对应行合并为一行,以cut相反;支持STDIN
  • Usage: paste [OPTION]… [FILE]…
option:
-d:指定分隔符,默认tab
-s:一次输出一行而不是并行输出,相当于内容转置(但只能竖转横)
example:
[root@centos7 test]#seq 3 | paste -d ' ' -s f2
[root@centos7 test]# seq 3
1
2
3
[root@centos7 test]# seq 3 |paste -s
1	2	3
[root@centos7 test]#

4)uniq

  • uniq - 删除重行;支持STDIN
  • Usage: uniq [OPTION]… [INPUT [OUTPUT]]
option:
-c:显示每行重复出现的次数
-d:仅显示重复过的行
-u:仅显示不重复的行(去掉重复过的行)

5)diff

  • diff - 逐行比较两个文件
  • diff [OPTION]… FILES

6)patch

  • patch - 复制在其它文件中进行的改变(要谨慎使用)
  • Usage: patch [OPTION]… [ORIGFILE [PATCHFILE]]
  • patch命令用于为特定软件包打补丁,diff命令可以生成补丁文件
example:
diff -u;patch -b(恢复文件时备份原文件)
f1.txt;f2.txt;diff.txt为f1.txt和f2.txt的比较文件;三个文件可以知二求一

[root@centos7 test]# diff -u f1 f2 > diff.txt
[root@centos7 test]# rm -f f2
[root@centos7 test]# patch -b f1 diff.txt
[root@centos7 test]# ls
diff.txt  f1  f1.orig 此时可恢复删除的f2文件,但patch命令默认是直接覆盖将f2
的内容直接覆盖至f1,-b可将f1原内容进行备份。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: