wc

wc命令用于报告文本文件的一些统计计数,例如行数、单词数、字节数等。

语法如下。

wc [OPTION]... [FILE]...
wc [OPTION]... --files0-from=F

--files0-from=F:这个选项几乎没见过有人使用,我也看不懂,因此就忽略掉了。

默认情况下显示3个计数,从左往右分别是行数、单词数和字节数。

[root@C7 ~]# wc /etc/passwd
/etc/passwd

如果被统计的文件数大于1,那么还会显示一行总计。

[root@C7 ~]# wc /etc/passwd /etc/init.d/functions
/etc/passwd
/etc/init.d/functions
total

可以通过选项控制,单独显示这3个计数。

-l, --lines:显示行数。

[root@C7 ~]# wc -l /etc/passwd
/etc/passwd

-w, --words:显示单词数。

[root@C7 ~]# wc -w /etc/passwd
/etc/passwd

-c, --bytes:显示字节数。

[root@C7 ~]# wc -c /etc/passwd
/etc/passwd

还可以显示一些另外的计数。

-m, --chars:显示字符数。

[root@C7 ~]# wc -m /etc/passwd
/etc/passwd

-L, --max-line-length:显示文件中最长的行的长度。

[root@C7 ~]# wc -L /etc/passwd
/etc/passwd

cut

从一个文本文件中,截取我们所需要的部分进行显示,一般是用于有固定的分隔符的文本文件,例如/etc/passwd这种以“:”作为分隔符的文件。

cut的默认分隔符是TAB。

语法如下。

cut OPTION... [FILE]...

我们创建一个测试文件cut.txt,第一行以TAB分隔,第二行以一个空格分隔,第三行分别以一个空格、两个空格和三个空格分隔。

[root@C7 ~]# cat -A cut.txt
a^Ilong^Idi^Idi$
a long di di$
a long di di$

在“cat -A”的输出中,“^I”表示TAB,“$”表示换行符。

-f, --fields=LIST:指定要截取每一行中第几个字段的数据。

这里的LIST,可以是单独的某个字段,也可以是连续的字段范围,也可以是离散的字段,如下所示。

# cut -f  FILE
# cut -f ,, FILE
# cut -f - FILE
# cut -f ,-, FILE
# cut -f - FILE:从第2个字段到行尾。
# cut -f - FILE:从行首到第2个字段。

LIST也可用于后面的-b和-c选项。

然后我们尝试对cut.txt取第二个字段。

[root@C7 ~]# cut -f  cut.txt
long
a long di di
a long di di

我们发现,第一行以TAB为分隔符的行取出的字段是正确的,另外2个字段是整行都取出来了。

这是因为默认情况下不包含分隔符的行会被整行打印,如果想避免这种情况可以使用-s选项。

-s, --only-delimited:只打印那些包含分隔符的行。

[root@C7 ~]# cut -sf  cut.txt
long

这里有一点需要注意,使用短选项的时候,-f后面必须跟着数字,如果跟其他选项就会报错。

[root@C7 ~]# cut -fs  cut.txt
cut: invalid byte, character or field list

-d, --delimiter=DELIM:指定分隔符,而不使用默认的TAB,这个选项很有用,许多文件的默认分隔符都不是TAB。

[root@C7 ~]# head -n  /etc/passwd | cut -d : -f
/bin/bash
/sbin/nologin
/sbin/nologin

-b, --bytes=LIST:只取多少个字节数的数据。

-c, --characters=LIST:只取多少个字符数的数据。

当取的数据是数字和字母的时候,这两个选项的结果一般是相同的。

[root@C7 ~]# echo "alongdidi" | cut -b -
alon
[root@C7 ~]# echo "alongdidi" | cut -c -
alon

--output-delimiter=STRING:设置输出时候的分隔符,默认是采用和输入文件相同的分隔符。

[root@C7 ~]# grep -E "^(root|zwl)" /etc/passwd | cut -d : -f ,
root:/bin/bash
zwl:/bin/bash
[root@C7 ~]# grep -E "^(root|zwl)" /etc/passwd | cut -d : -f , --output-delimiter "'s shell ="
root's shell =/bin/bash
zwl's shell =/bin/bash

sort

sort用于将文件排序后显示。

语法如下。

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

sort的排序可以针对多个文件,一起排序后显示。

[root@C7 ~]# cat sort1.txt
aaa
ccc
bbb
[root@C7 ~]# cat sort2.txt
eee
fff
ddd
[root@C7 ~]# sort sort1.txt
aaa
bbb
ccc
[root@C7 ~]# sort sort1.txt sort2.txt
aaa
bbb
ccc
ddd
eee
fff

sort的默认排序方式,是先比较第一个字符,如果一样,则再比较第二个字符。以此类推。

数字的排序方式是0~9,字母的排序方式是a~z。

如果字母相同只是大小写不同的话,那么小写排在大写的前面,例如a排在A的前面。

[root@C7 ~]# cat sort.txt
aaa
DDD
fff
AAA
bbb
BBB
eee
CCC [root@C7 ~]# sort sort.txt aaa
AAA
bbb
BBB
CCC
DDD
eee
fff

-r, --reverse:sort默认是有小到大排序,该选项则用于反向排序。

[root@C7 ~]# sort sort.txt

[root@C7 ~]# sort -r sort.txt

-n, --numeric-sort:基于数值排序。由于sort默认的排序机制导致sort没办法将数字按照数值大小准确排序,需要加上该选项方可实现。

[root@C7 ~]# sort sort.txt

[root@C7 ~]# sort -n sort.txt

-t, --field-separator=SEP:指定字段分隔符。

-k, --key=KEYDEF:指定排序依据的字段。

二者结合可以使得sort在排序某个文件的时候根据每行固定的字段来排序。例如根据UID排序/etc/passwd。

[root@C7 ~]# head -n  /etc/passwd | sort -t : -k  -n
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin

-f, --ignore-case:忽略大小写排序,原理是sort内部会将小写字母转换成大写字母来排序。

-u, --unique:使得重复的行只出现一次,结合-f选项的话,只会保留一种大写/小写的情况。

[root@C7 ~]# sort sort.txt
aaa
aaa
AAA
bbb
bbb
BBB
ddd
jjj
ooo
[root@C7 ~]# sort -uf sort.txt
aaa
BBB
ddd
jjj
ooo

uniq

uniq用于报告或者忽略掉重复的行。但是只会将相邻的重复行移除掉,而不是将整个文本中重复的行移除掉。

[root@C7 ~]# cut -d : -f  /etc/passwd
/bin/bash
/sbin/nologin
-- 多个重复 --
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
-- 多个重复 --
/sbin/nologin
/bin/bash
-- 多个重复 --
/bin/bash
/sbin/nologin
[root@C7 ~]# cut -d : -f /etc/passwd | uniq
/bin/bash
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/bin/bash
/sbin/nologin

这可能不是我们所要的结果,一般我们会先使用sort排序一下,再使用uniq移除相邻的重复行。这样子就可以实现删除文本中重复的行的功能。

[root@C7 ~]# cut -d : -f  /etc/passwd | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown

-c, --count:uniq区别于“sort -u”的主要一点在于它还可以统计重复的行所出现的次数。

[root@C7 ~]# cut -d : -f  /etc/passwd | sort | uniq -c
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown

-d, --repeated:只显示有重复的行。

[root@C7 ~]# cut -d : -f  /etc/passwd | sort | uniq -cd
/bin/bash
/sbin/nologin

-u, --unique:也可以只打印不重复的行。

[root@C7 ~]# cut -d : -f  /etc/passwd | sort | uniq -u
/bin/sync
/sbin/halt
/sbin/shutdown

diff和patch

diff用于对比两个文本文件的区别,对比的结果本质上是一个补丁文件,可以让patch用来对文件打补丁。

首先我们先看两个文本文件的内容。

[root@C7 ~]# cat -n old_file.txt
today
is
thursday
!!!
[root@C7 ~]# cat -n new_file.txt
today
is
not
thursday
!?!?

接下来看diff的默认比对结果。

[root@C7 ~]# diff old_file.txt new_file.txt
2a3
> not
4c5
< !!!
---
> !?!?

这个结果其实就是描述了被对比的两个文件之间的区别,只不过这个描述我们人类比较难以理解,将这个描述重定向至文本文件,那么该文件就成为一个补丁文件了。

[root@C7 ~]# diff old_file.txt new_file.txt > patch.txt

当我们拥有old_file.txt和补丁文件patch.txt的时候,我们就可以通过patch命令打补丁将old_file.txt变成(“升级”)new_file.txt。

[root@C7 ~]# patch -i patch.txt old_file.txt
patching file old_file.txt
[root@C7 ~]# cat old_file.txt
today
is
not
thursday
!?!?

如果想使得old_file.txt变回打补丁前的样子,可以在使用patch命令的时候,加上-R选项,打反向补丁。

[root@C7 ~]# patch -Ri patch.txt old_file.txt
patching file old_file.txt
[root@C7 ~]# cat old_file.txt
today
is
thursday
!!!

几个文本处理工具的简单使用(wc,cut,sort,uniq,diff和patch)的更多相关文章

  1. 文本分析工具awk简单示例

    先创建一个文件:vim hi 取第2个字段和第3个字段: awk '{print $2,$3}' hi     注意{}中的,逗号会在输出的时候转变为空格 加入字符说明: 显示整行: 指定字段分隔符: ...

  2. cut sort uniq wc 一 文本处理工具

    cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. 一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. -c : 以字符为单位进行分割. c ...

  3. 四、IO重定向和管道以及基本文本处理工具

    一.三种IO设备 程序:数据+指令 或 数据结构+算法程序必须能够读入输入然后经过加工来产生结果,其接受的输入可以是变量.数组.列表.文件等等,生产出来的结果可以使变量.数组.列表.文件等等.即:程序 ...

  4. shell脚本基础和grep文本处理工具企业应用4

    文本处理工具:    egrep:        支持扩展的正则表达式实现类似于grep文本过滤功能:grep -E        egrep [OPTIONS] PATTERN [FILE...]  ...

  5. 【Linux】【Shell】【text】文本处理工具

    文本查看及处理工具:wc, cut, sort, uniq, diff, patch wc:word count wc [OPTION]... [FILE]... -l: lines -w:words ...

  6. 文本处理工具(cut,sort,tr,grep等)

    命令目录,查看某一个命令可点击直接跳转: 文件查看 cat tac rev more less 按行截取 head tail 转化内容 tr 按列操作 cut paste 分析文本 wc sort u ...

  7. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  8. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

  9. 使用Linux的命令行工具做简单的文本分析

    Basic Text Analysis with Command Line Tools in Linux | William J Turkel 这篇文章非常清楚的介绍了如何使用Linux的命令行工具进 ...

随机推荐

  1. Django搭建简易博客教程(四)-Models

    原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...

  2. python - class类 (七) 三大特性 - 封装 结尾

    封装: # 封装 #第一层,类就是麻袋,本身就是一种封装 #第二层,类中定义私有的,至在类的内部使用,外部无法访问 #第三层,封装在于明确区分内外,使得类实现者可以修改封装内的东西二不影响外部调用者 ...

  3. java项目启动时执行指定方法

    想到的就是监听步骤如下: 1.配置web.xml <listener> <listener-class>com.listener.InitListener</listen ...

  4. Properties文件工具类的使用--获取所有的键值、删除键、更新键等操作

    有时候我们希望处理properties文件,properties文件是键值对的文件形式,我们可以借助Properties类操作. 工具类如下:(代码中日志采用了slf4j日志) package cn. ...

  5. pandas 定位 loc,iloc,ix

    In [114]: df Out[114]: A B C D 2018-06-30 0.318501 0.613145 0.485612 0.918663 2018-07-31 0.614796 0. ...

  6. BackBone结合ASP.NET MVC实现页面路由操作

    1. 问题的背景 什么是页面路由操作,就是通过浏览器地址栏的标记来实现页面内部的一些操作,这些操作具有异步性和持久性.应用场景主要有页面操作过程中的添加收藏夹的操作.后退操作等过程中能完全恢复界面. ...

  7. 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】

    这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...

  8. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  9. 腾讯云启动数据库进程,提示No such host is known

    回想一下,系统是否切换过外网IP,切换过则检查/etc/hosts文件中IP和主机名对应关系 现象:出错前一直做域名解析

  10. zabbix3.0使用ss命令对tcp连接数和状态的监控性能优化

    zabbix3.0对tcp连接数及状态的监控优化 之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以 ...