常用命令-文本处理相关

常用命令-文本处理

查看文本文件内容

cat

命令格式

cat [OPTION]... [FILE]...
常见选项参数说明
-E	显示行结束符$
-A	显示所有控制符
-n	对显示出的每一行进行编号
-b	非空行编号
-s	压缩连续的空行成一行

范例

[root@centos8 data]#cat -A file1.txt 
a ^Ib$
c  $

[root@centos8 data]#cat -nTE file1.txt 
     1	a ^Ib$
     2	c  $

扩展点

tac cat 命令反过来写,功能类似,按照行的倒序的方法输出文本信息

[root@centos8 data]#cat file1.txt 
123
456
789
[root@centos8 data]#tac file1.txt 
789
456
123

rev 跟tac 类似,tac 命令是按照行号倒序输出,rev 是将同一行内的内容前后内容倒序输出

[root@centos8 data]#cat file1.txt 
123
456
789
[root@centos8 data]#rev file1.txt 
321
654
987

nl 显示行号输出文本,等同于 cat -b

[root@centos8 data]#cat -b file1.txt 
     1	123
     2	456
     3	789
[root@centos8 data]#nl file1.txt 
     1	123
     2	456
     3	789

查看非文本文件内容

hexdump

二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看

范例

[root@centos8 ~]#hexdump -C -n 512 /dev/sda
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|

扩展点

od 以八进制格式查看文本

[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x
0000000 64636261 68676665 6c6b6a69 706f6e6d
0000020 74737271 78777675 000a7a79
0000033

[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x1
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70
0000020 71 72 73 74 75 76 77 78 79 7a 0a
0000033

[root@centos8 data]#echo {a..z}|tr -d ' '|od -t x1z
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  >abcdefghijklmnop<
0000020 71 72 73 74 75 76 77 78 79 7a 0a                 >qrstuvwxyz.<
0000033

xxd 以十六进制格式查看文本

[root@centos8 data]#echo {a..z}|tr -d ' '|xxd
00000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70  abcdefghijklmnop
00000010: 7172 7374 7576 7778 797a 0a              qrstuvwxyz.

分页查看文本内容

more 和less

用于实现分页查看文件,可配合管道实现输出信息的分页。less 还可实现STDIN 输出,还是man 命令使用的分页器。

more 和less 的功能类似,不同的是,more 在显示到最后一行后会退出more 命令,将无法再次回退查看前面的内容。less 执行后,默认不会退出,直到用户执行退出命令才结束。

more [OPTIONS...] FILE...

参数 -d:显示翻页及退出提示

#查看时有用的命令包括
/文本 搜索 文本
n/N	跳到下一个或上一个匹配

范例

[root@centos8 data]#cat /etc/init.d/functions |less
# -*-Shell-script-*-
#
# functions This file contains functions to be used by most or all
#       shell scripts in the /etc/init.d directory.
#

TEXTDOMAIN=initscripts

# Make sure umask is sane
umask 022

# Set up a default search path.
PATH="/sbin:/usr/sbin:/bin:/usr/bin"
export PATH
...省略...

显示文本前或后行内容

head 和tail

head 显示文件或标准输入的前面行,默认输出前10行的内容,支持管道

命令格式

head [OPTION]... [FILE]...

常用参数选项
-c #	指定获取前# 字节
-n #	指定获取前# 行
-#		同上

范例

[root@centos8 data]#head -n3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@centos8 data]#head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@centos8 data]#echo a我b |head -c4
a我[root@centos8 data]#

#获取随机10位字符
root@centos8 data]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
SEIE15Hkyk[root@centos8 data]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
KM9Ua535Lt[root@centos8 data]#

# 参数后跟负数表示除了后# 行外,其他的都取
[root@centos8 data]#cat /data/file.txt
1
2
3
4
5
6
7
8
9
10
[root@centos8 data]#head -n -3 /data/file.txt
1
2
3
4
5
6
7

tailhead 相反,查看文件或标准输入的倒数行

命令格式

tail [OPTION]... [FILE]...

常用参数选项
-c #	指定获取后# 字节
-n #	指定获取后# 行
-#		同上
-f		跟踪显示文件fd 新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除在新建同名文件,将无法继续跟踪文件
-F		跟踪文件名,相当于 --follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件

tailf	类似tail -f,当文件不增长时并不访问文件

范例

[root@centos8 data]#cat /data/file.txt 
1
2
3
4
5
6
7
8
9
10
[root@centos8 data]#tail -n 3 /data/file.txt 
8
9
10

#获取
[root@centos8 data]#tail -n +3 /data/file.txt 
3
4
5
6
7
8
9
10

head 和tail 的总结示意图

head 和tail 的总结

按列抽取文本内容

cut

命令可提取文本文件或STDIN数据的指定列

命令格式

cut [OPTION]... [FILE]...

常用选项参数说明
-d DELIMITER	指明分隔符,默认tab
-f FILEDS:
	#:第# 个字段,例如:3
	#,#[,#]:离散的多个字段,例如:1,3,6
	#-#:连续的多个字段,例如:1-6
	混合使用:1-3,7
-c	按字符切割
--output-delimiter=STRING	指定输出分隔符

范例

#获取/etc/passwd 文件中的以:分隔的第1,3,4,7列
[root@centos8 data]#cut -d: -f1,3-4,7 /etc/passwd
root:0:0:/bin/bash
bin:1:1:/sbin/nologin
daemon:2:2:/sbin/nologin
……省略部分……

#以“---”作为分隔符来查看/etc/passwd 中的内容
[root@centos8 data]#cut -d: -f1,3,7 --output-delimiter="---" /etc/passwd
root---0---/bin/bash
bin---1---/sbin/nologin
daemon---2---/sbin/nologin
……省略部分……

#获取ifconfig 中的ip地址10.0.0.6
[root@centos8 data]#ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.6  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::97c7:830c:b164:a36d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:7c:b8:2d  txqueuelen 1000  (Ethernet)
        RX packets 8665  bytes 830982 (811.5 KiB)
……省略部分……
[root@centos8 data]#ifconfig|head -n 2|tail -n +2|tr -s " "|cut -d " " -f3
10.0.0.6

#获取硬盘的利用率,Use%
[root@centos8 data]#df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          989668       0    989668   0% /dev
tmpfs            1006108       0   1006108   0% /dev/shm
tmpfs            1006108    8868    997240   1% /run
tmpfs            1006108       0   1006108   0% /sys/fs/cgroup
#方式一
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tail -n +2
0
0
1
0
3
1
13
0
#方式二
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tr -d '[:alpha:]'

合并多个文件的内容

paste

合并多个文件同行号的列到一列

命令格式

paste [OPTION]... [FILE]...

常用参数选项说明
-d		#分隔符:指定分隔符,默认用TAB
-s		#所有行合成一行显示

范例

[root@centos8 data]#cat file.txt 
a
b
c
e
d
[root@centos8 data]#cat digit.txt 
1
2
3
4
5
6
7
8
9
0
#将file.txt 和digit.txt 中同行的内容以“:”拼接成一列
[root@centos8 data]#paste -d: file.txt digit.txt 
a:1
b:2
c:3
e:4
d:5
:6
:7
:8
:9
:0

#列转行
[root@centos8 data]#paste -sd: file.txt digit.txt 
a:b:c:e:d
1:2:3:4:5:6:7:8:9:0

分析统计文本内容

wc

用于统计文件的总行数、单词总数、字节总数和字符总数。除文件外,还可对STDIN 中的数据统计

常用参数选项说明
-l	只统计行数
-w	只统计单词总数(单词是以字母、数字、下划线组成的)
-c	只统计字节总数
-m	只统计字符总数
-L	显示文件中最长行的长度

范例

#默认统计行数、单词数、字符总数
[root@centos8 data]#wc /etc/fstab 
 17  79 717 /etc/fstab

[root@centos8 data]#wc -l /etc/fstab 
17 /etc/fstab

[root@centos8 data]#wc -w /etc/fstab 
79 /etc/fstab

[root@centos8 data]#wc -L /etc/fstab 
93 /etc/fstab

#中文占3个字符数
[root@centos8 data]#vim file.txt 
今天礼拜四
[root@centos8 data]#wc file.txt 
 1  1 16 file.txt
sort 与uniq

sort 用于文本排序,在STDOUT 中,不改变原始文件

命令格式

sort [options] file(s)

常用参数选项说明
-r	执行反方向(由上至下)整理,倒序
-R	随机排序
-n	执行按数字大小整理
-f	选项忽略(fold)字符串中的字符大小写
-u	选项(独特,unique)删除输出中的重复行
-t c	c为字符,使用c 做为字段界定符
-k #	选项按照使用c字符分隔的# 列来整理能够使用多次

范例

#将磁盘利用率从大到小排序显示
[root@centos8 data]#df|tr -s ' ' %|cut -d% -f5|tail -n +2|sort -nr
13
3
1
1
0
0
0
0
#获取/etc/passwd 文件中最后3行记录的1,3,7列的值,并对第3列做降序排序
[root@centos8 data]#cut -d: -f1,3,7 /etc/passwd|tail -n 3|sort -t: -k2 -nr
dawn:1000:/bin/bash
postfix:89:/sbin/nologin
apache:48:/sbin/nologin

uniq 删除连续重复的行,只保留一行

命令格式

uniq [option]...[file]...

常用参数选项说明
-c	显示每行重复出现的次数
-d	仅显示重复过的行
-u	仅显示不曾重复的行

ps:uniq 常和sort 搭配管道一起使用,eg:
sort file.txt | uniq -c
[root@centos8 data]#cat f1.txt 
abc
123
1a2b
a1b2
123abc
[root@centos8 data]#cat f2.txt 
123abc
123
1a2b
aabb
123abc


#获取两个文件的相同行
[root@centos8 data]#cat f1.txt f2.txt | sort | uniq -d
123
123abc
1a2b
#获取两个文件的不同行
[root@centos8 data]#cat f1.txt f2.txt | sort | uniq -u

a1b2
aabb
abc

diff 与patch

diff 比较两个文件之间的区别

常用参数选项
-u	输出“统一的(unified)”diff格式文件,最适用于补丁文件

[root@centos8 data]#diff f1.txt f2.txt 
1c1
< abc
---
> 123abc
4c4
< a1b2
---
> aabb
5a6
> 

#带参数选项-u
[root@centos8 data]#diff -u f1.txt f2.txt 
--- f1.txt	2020-08-06 17:02:47.473863243 +0800
+++ f2.txt	2020-08-06 17:04:33.205866263 +0800
@@ -1,5 +1,6 @@
-abc
+123abc
 123
 1a2b
-a1b2
+aabb
 123abc
+

patch 复制在其他文件中进行的改变(需谨慎使用)

patch -b f1.txt f1_bak.txt

vimdiff

vimdiff 其实是vim编辑器的diff 模式,vim 中的快捷方式和命令在diff 模式下都支持

#窗口切换命令
Ctrl + w,l	光标切换到右侧窗口
Ctrl + w,h	光标切换到左侧的窗口
Ctrl + w,w	光标在两个窗口间彼此切换

#常用命令(末行模式)
qa	退出所有文件
wa	保存所有文件
wqa	保存并退出所有文件
qa! 强制退出(不保存)所有文件
zo	查看被折叠的内容
zc	重新折叠

范例

#跟在vim 编辑器下操作类似
[root@centos8 data]#vimdiff f1.txt f2.txt

ps:
玫红色(紫色)	文本内容不相同的行
红色(背景或文本)	文本内容不同或第二个参数文件没有的内容
蓝色	第一个参数文件有的内容

vimdiff 演示图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值