文本查看及处理工具wc、cut、sort 、uniq、 diff、 patch
程序员文章站
2024-02-24 11:11:40
...
一:wc命令
介绍:
可以计算文件的Byte数、字数、或是列数,若不指定文件名称、
或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。
语法:
wc [OPTION]... [FILE]...
参数:
-l:lines 只显示行数
-w:words 只显示字数
-c或--bytes或--chars 只显示Bytes数
例子:
1.在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。
#wc filename
2.查看多个文件的信息
#wc filename1 filename2 filename3
3.使用参数以后,用哪个就显示那个
#wc -l 显示行数
#wc -w 显示字数
#wc -c 显示bytes数
二:cut命令
介绍:
文本截取工具
语法:
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
参数:
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-d CHAR: 以指定的字符为分隔符;
-f FIELDS:挑选出的字段;
#: 指定的单个字段;
#-#: 连续的多个字段;
#,#: 离散的多个字段;
使用说明:
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
例子:
当你执行who命令时,会输出类似如下的内容:
$ who
root tty1 2019-07-21 19:10
root pts/0 2019-07-21 19:11 (10.2.19.9)
1.如果我们想提取每一行的第3个字节,就这样:
$ who|cut -b 4
t
t
2.如果我们想提取每一行的第2-4个字节,就这样:
$ who|cut -b 3-5
oot
oot
3.如果我们想提取每一行的第2或4或10的字节,就这样:
$ who|cut -b 2,4,10
ott
otp
注意:使用-d参数是应该和-f 配套使用(目前只知道这一种)
查看一下lizi.txt(我自己要查看的文件)里面的内容
[[email protected] ~]# cat lizi.txt
000 001
002 003
004 005
006 007
008 009
4 对test内容进行选取,我们这里选取其第一列。
输入命令:cut -f1 -d" " lizi.txt
[[email protected] ~]# cut -f1 -d" " lizi.txt
000
002
004
006
008
其中 -f的意思是显示指定字段的内容,1是第一列 -d的意思是
指定字段的分隔符,默认的字段分隔符为“TAB”,我们这里设置为空格
5 对lizi.txt进行打印除了第一列之外的列。
输入命令:cut -f1 -d" " --complement lizi.txt
[[email protected] ~]# cut -f1 -d" " --complement lizi.txt
001
003
005
007
009
其中--complement的意思是补足被选择的字节、字符或字段
三:sort命令
介绍:
文本排序工具
语法:
sort [OPTION]... [FILE]...
参数:
-n:基于数值发小排序而非字符排序;
-t CHAR: 指定分隔符;
-k #: 用于排序比对的字段;
-r: 逆序排序;
-f: 忽略字符大小写;
-u: 重复行只保留一份;
重复行:连续且相同;
例子:
1.对/etc/passwd 的账号进行排序
[[email protected] ~]# cat /etc/passwd | sort
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
fedora:x:4005:4005::/users/fedora:/bin/bash
2.内容是以 : 来分隔的,我想以第三栏来排序,该如何
root:x:0:0:root:/root:/bin/bash
zhangsan:x:1000:1000:zhangsan:/home/zhangsan:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
四:uniq命令
介绍:
报告或移除重复的行因此uniq经常和sort合用。也就是说,
为了使uniq起作用,所有的重复行必须是相邻的。
语法:
uniq [OPTION]... [INPUT [OUTPUT]]
参数:
-c: 统计每行出现的重复次数;
-u: 只显示没有重复过的行;
-d: 只显示重复过的行;
-i: 忽略大小写字符的不同;
例子
先查看f1.txt
#cat f1.txt
[[email protected] ~]# cat f1.txt
hello
world
like
country
color
hello
color
like
直接删除未经排序的,发现没有任何被删除
[[email protected] ~]# uniq f1.txt
hello
world
like
country
color
hello
color
like
排序(倒序)文件,默认是去重
[[email protected] ~]# cat f1.txt |sort |uniq
color
country
hello
like
world
排序之后删除了重复行,同时在行首位置输出该行重复的次数
[[email protected] ~]# sort f1.txt | uniq -c
2 color
1 country
2 hello
2 like
1 world
仅显示存在重复的行,并在行首显示该行重复的次数
[[email protected] ~]# sort f1.txt | uniq -dc
2 color
2 hello
2 like
仅显示不重复的行
[[email protected] ~]# sort f1.txt | uniq -u
country
world
五:diff命令
介绍:
逐行比较文件内容中的不同之处
语法:
diff <变动前文件> <变动后文件>
diff有三种格式:
参数:
a 添加(addition)
c 改变(change)
d 删除(deletion)
-u: 使用unfied机制,极限是要修改的行的上下文,默认为3行;
例子
[[email protected] ~]# diff f1.txt f2.txt
1,8d0
< hello
< world
< like
< country
< color
< hello
< color
< like
第一行的意思是没有一行一样的
后面是给的不一样的答案
六:patch
介绍:
向文件打补丁,同diff一起使用
语法:
patch [-bceEflnNRstTuvZ][-B <备份字首字符串>][-d <工作目录>][-D <标示符号>]
[-F <监别列数>][-g <控制数值>][-i <修补文件>][-o <输出文件>][-p <剥离层级>]
[-r <拒绝文件>][-V <备份方式>][-Y <备份字首字符串>][-z <备份字尾字符串>]
[--backup-if-mismatch][--binary][--help][--nobackup-if-mismatch][--verbose]
[原始文件 <修补文件>] 或 path [-p <剥离层级>] < [修补文件]
例子
[[email protected] ~]# yum install patch -y <==安装补丁工具
[[email protected] ~]# vim lala
[[email protected] ~]# cat lala
hello haha
butterfly
[[email protected] ~]# vim lala1
[[email protected] ~]# cat lala1
hello haha
I like lala
[[email protected] ~]# diff -u lala lala1 > lala.path
[[email protected] ~]# ls
lala lala1 lala.path
[[email protected] ~]# patch -b lala lala.path
##给文件 lala 打补丁, -b —— 备份源文件
patching file lala
[[email protected] mnt]# ls
lala lala1 lala.orig lala.path
[[email protected] ~]# cat lala.path
--- lala 2018-06-12 03:39:26.522689949 -0400
+++ lala1 2018-06-12 03:39:56.100689949 -0400
@@ -1,2 +1,2 @@
hello haha
-butterfly
+I like lala
[[email protected] ~]# cat lala
hello haha
I like lala
[[email protected] ~]# cat lala1
hello haha
I like lala
[[email protected] ~]# cat lala.orig
hello haha
butterfly