欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

文本查看及处理工具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