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. 【Linux】Linux中Swap与Memory内存简单介绍

    背景介绍 对于Linux来说,其在服务器市场的使用已经占据了绝对的霸主地位,不可动摇.Linux的各种设计思想和使用也被传承(当然不乏各种黑Linux,而且黑的漂亮).Linux的很多独特的设计,对性 ...

  2. gdb revert, Go to previous line in gdb

    Yes! With the new version 7.0 gdb, you can do exactly that! The command would be "reverse-step& ...

  3. linux 下程序员专用搜索源码用来替代grep的软件ack(后来发现一个更快的: ag), 且有vim插件的

    发现一个比ack更快更好用的:  https://github.com/ggreer/the_silver_searcher   , 使用时命令为ag,它是基于ack的代码二次开发的,所有使用方法基本 ...

  4. vmware添加磁盘后linux无需重启识别的方法

    cd /sys/class/scsi_host/ [root@centos4 scsi_host]# ls host0 host1 host2 有几个host就刷几次 [root@centos4 sc ...

  5. openssl版本升级操作记录【转】

    需要部署nginx的https环境,之前是yum安装的openssl,版本比较低,如下:   [root@nginx ~]# yum install -y pcre pcre-devel openss ...

  6. 020_秘钥管理服务器vault

    一. https://github.com/hashicorp/vault     #待研究

  7. aliyun添加数据盘parted方式分区格式化和lvm挂载及数据盘的扩容

    一.普通磁盘分区管理方式 1.对磁盘进行分区 列出磁盘 # fdisk -l # fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Change ...

  8. 转载:磁盘目录(1.3.3)《深入理解Nginx》(陶辉)

    原文:https://book.2cto.com/201304/19614.html 要使用Nginx,还需要在Linux文件系统上准备以下目录. (1)Nginx源代码存放目录 该目录用于放置从官网 ...

  9. node基础知识

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个可以让 JavaScript 运行在服务器端的平台 Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  10. django----Form扩展

    用第二种方式需要加上下面的这个: 三.判断用户民是不存在,存在就不添加了 from django.core.exceptions import ValidationError initial  修改时 ...