文本查看及处理工具简单命令

一、文件查看命令:

cat,tac,rev

cat [OPTION]... [FILE]...(查看文件内容)

-E:显示行结束符$
-n:对显示出的每一行进行编号
-A:显示所有控制符
-b:非空行编号
-s:压缩连续的空行成一行

示例一:

[root@centos6data]#cat -n f1
     1	1
     2	2
     3	3
     4	14
     5	
     6	adw
     7	we
     8	ads

示例二:

[root@centos6data]#cat -A f1
1$
2$
3$
14$
$
adw$
we$
ads$

示例三:

[root@centos6data]#cat <f1 > f2  将f1的内容新建f2并存入内容
[root@centos6data]#cat f2
1
2
3
14

adw
we
ads

tac  纵向将反向显示文本内容:

[root@centos6data]#seq 1 10 >f1
[root@centos6data]#tac f1
10
9
8
7
6
5
4
3
2
1

rev 横向将文本反向显示:

[root@centos6data]#cat /etc/fstab >f1
[root@centos6data]#rev f1

#
batsf/cte/ #
9102 61:60:51 22 guA uhT no adnocana yb detaerC #
#
'ksid/ved/' rednu deniatniam era ,ecnerefer yb ,smetsyselif elbisseccA #
ofni erom rof )8(diklb ro/dna )8(tnuom ,)8(sfdnif ,)5(batsf segap nam eeS #
#
1 1        stluafed    4txe                       / a625053c83bb-2fdb-f174-f26c-07ba9a62=DIUU
2 1        stluafed    4txe                   toob/ 404f39fbf14b-cc08-97e4-083d-3edd6f1e=DIUU
2 1        stluafed    4txe                   atad/ ac9d2493fc8c-5cb9-1a64-432b-9df075f7=DIUU
0 0        stluafed    paws                    paws cafaae2f597c-f3ca-5984-7881-c9d6f5eb=DIUU
0 0        stluafed   sfpmt                mhs/ved/                   sfpmt
0 0  026=edom,5=dig  stpved                stp/ved/                  stpved
0 0        stluafed   sfsys                    sys/                   sfsys
0 0        stluafed    corp                   corp/                    corp

二、分页查看文件内容

more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示

[root@centos6data]#cat /etc/passwd | more
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rtkit:x:499:499:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:498:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
--More--

less:一页一页地查看文件或STDIN输出查看时有用的命令包括:
/文本 搜索 文本
n/N 跳到下一个 或 上一个匹配
less 命令是man命令使用的分页器

[root@centos6data]#ls /etc/ | less
abrt
acpi
adjtime
akonadi
aliases
aliases.db
alsa
alternatives
anacrontab
anthy-conf
asound.conf
at.deny
audisp
audit
autofs.conf
autofs_ldap_auth.conf
auto.master
auto.misc
auto.net
auto.smb
avahi
bash_completion.d
bashrc
blkid
bluetooth
bonobo-activation
cas.conf

三、显示文本前或后行内

head [OPTION]... [FILE]...(取文件的前几行)
-c #: 指定获取前#字节
-n #: 指定获取前#行
-#: 指定行数

示例:取当前文本的前两行内容

[root@centos6data]#df | head -n2
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2      100660656 8786328  86754328  10% 

tail [OPTION]... [FILE]...(取文件的后几行)

-c #: 指定获取后#字节
-n #: 指定获取后#行
-#:同上
-f: 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor
-F: 跟踪文件名,相当于--follow=name --retry

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

示例:查看日志文件的后5行

[root@centos6data]#tail /var/log/messages  -n 5
Nov  8 14:21:26 centos6 pulseaudio[2688]: alsa-sink.c: We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail.
Nov  8 14:21:26 centos6 rtkit-daemon[2690]: Sucessfully made thread 2695 of process 2688 (/usr/bin/pulseaudio) owned by '42' RT at priority 5.
Nov  8 14:21:27 centos6 pulseaudio[2688]: alsa-source.c: ALSA woke us up to read new data from the device, but there was actually nothing to read!
Nov  8 14:21:27 centos6 pulseaudio[2688]: alsa-source.c: Most likely this is a bug in the ALSA driver 'snd_ens1371'. Please report this issue to the ALSA developers.
Nov  8 14:21:27 centos6 pulseaudio[2688]: alsa-source.c: We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail.

-f和-F之间的区别:

总结:-f跟踪的是文件描述符,而-F跟踪的是文件名。

先验证-f,删除了f1就不会在跟踪内容,就算创建了f1,也不会再跟踪。

[root@ansibledata]#tail -f -n 2 f1  跟踪此时的文件,在此文件中追加内容,就会显示跟踪效果
5
6
a

[root@ansibledata]#echo a >> f1  追加一个文件
我们将f1删除重新复制一个文件再起名为f1,此时不再跟踪文件信息
[root@ansibledata]#rm -f f1
[root@ansibledata]#cat /etc/fstab >  f1
[root@ansibledata]#tail -f -n 2 f1
5
6
a

验证-F:当tail 加-F 参数时,跟踪的文件如果被删除就会显示此文件不可访问,如果再创建f1,-F就会继续跟踪,说明-F是跟踪文件:

[root@ansibledata]#rm -rf f1
[root@ansibledata]#tail -F -n 2 f1
UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data                   xfs     defaults        0 0
UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap                    swap    defaults        0 0
tail: ‘f1’ has become inaccessible: No such file or directory
[root@ansibledata]#cp /etc/inittab f1   当我们再创建f1。
[root@ansibledata]#tail -F -n 2 f1  此时-F会继续跟踪文件
UUID=eb4bf5e6-2645-4b1c-bda8-12c5831b81c2 /data xfs defaults 0 0
UUID=b8c37e0b-3628-40b6-ac44-c36ca09b448f swap swap defaults 0 0
tail: ‘f1’ has become inaccessible: No such file or directory
tail: ‘f1’ has appeared; following end of new file
# inittab is no longer used when using systemd.
#
# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
#
# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
#
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
#
# To view current default target, run:
# systemctl get-default
#
# To set a default target, run:
# systemctl set-default TARGET.target

四、文本截取工具

cut [OPTION]... [FILE]...(按列抽取文本)

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

示例一:

取出文本的第一列到第三列:

[root@ansibledata]#getent passwd | cut -d: -f1-3
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5
shutdown:x:6
halt:x:7
mail:x:8
operator:x:11
games:x:12
ftp:x:14

示例二:

将df显示的文本按空格压缩,用cut以%作为分隔符,取第5列,将磁盘利用率取出来:

[root@ansibledata]#df | tr -s " " % |cut -d% -f5
Use
5
0
0
2
0
1
17
1

示例三:

将网卡的IP地址取出来。

[root@ansibledata]#ifconfig ens33 | tr -s " " | head -n2 |tail -n1|cut -d" " -f3
192.168.34.101

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

paste [OPTION]... [FILE]...
-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示

示例一:

默认将f1和f2合并为两列

[root@ansibledata]#seq 1 10 > f1
[root@ansibledata]#echo {a..j} | tr " " "\n" > f2
[root@ansibledata]#paste f1 f2
1	a
2	b
3	c
4	d
5	e
6	f
7	g
8	h
9	i
10	j

 示例二:

 -s 用法:横向合并

[root@ansibledata]#paste -s f1 f2
1	2	3	4	5	6	7	8	9	10
1	2	3	4	5	6	7	8	9	10

 -d用法:可以以冒号作为分隔符

[root@ansibledata]#paste -d: f1 f2
1:a
2:b
3:c
4:d
5:e
6:f
7:g
8:h
9:i
10:j

五、收集文本统计数据wc

wc:计数单词总数、行总数、字节总数和字符总数
可以对文件或STDIN中的数据运行行数 字数 字节数
常用选项

-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

示例一:

统计当前文本的行数

[root@ansibledata]#cat f2 | wc -l
12
[root@ansibledata]#cat /var/log/messages | wc -l
44786

示例二:

统计当前文本文件最长行的长度

[root@ansibledata]#cat /var/log/messages | wc -L
1420

示例三:

除了字母其他的字母都转换为回车换行:

[root@ansibledata]#cat /etc/profile | tr -sc "a-zA-Z" "\n" |wc -l
253

六、文本排序sort

把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
常用选项

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

示例:

对文本以冒号形式对第三列进行逆序排序

[root@ansibledata]#cat /etc/passwd | sort -t: -k3 -nr
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
wang:x:1001:1001::/home/wang:/bin/bash
liu:x:1000:1000:liu:/home/liu:/bin/bash
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
gluster:x:996:993:GlusterFS daemons:/run/gluster:/sbin/nologin
saslauth:x:995:76:Saslauthd user:/run/saslauthd:/sbin/nologin
unbound:x:994:989:Unbound DNS resolver:/etc/unbound:/sbin/nologin

示例:

sort -u 有去重复的字符串功能,不加-u会默认将重复的排序到一起。

[root@ansibledata]#cat f1
aa
bb
cc
dd
[root@ansibledata]#cat f2
aaa
bb
cc
ddd
[root@ansibledata]#cat f1 f2 | sort -u
aa
aaa
bb
cc
dd
ddd

示例:

取出分区利用率的最大值:

[root@ansibledata]#df | tr -s " " :|cut -d: -f5|sort -nr |head -1
17%

七、uniq命令:从输入中删除前后相接的重复的行

uniq [OPTION]... [FILE]...

-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

注:连续且完全相同方为重复,才会进行统计
常和sort 命令一起配合使用:
sort userlist.txt | uniq -c

示例:

取出日志文件的前十个文本内容:

[root@ansibledata]#cut -d " " -f1 /var/log/httpd/access_log|sort |uniq -c | sort -nr |head -10

示例:

取出文件中的交集,也就是两个文件中重复的部分:

[root@ansibledata]#cat f1 
aa
bb
cc
ss
ddd
[root@ansibledata]#cat f2
aa
cc
sss
dddd
[root@ansibledata]#cat f1 f2 |sort | uniq -d
aa
cc

示例:

显示两个文本中不同的内容,也就是都没有的内容:

[root@ansibledata]#cat f1 f2 | sort |uniq -u
bb
ddd
dddd
ss
sss

示例:

显示文件的并集,就是将两个文件的内容都合在一起:

[root@ansibledata]#cat f1 f2 | sort -u
aa
bb
cc
ddd
dddd
ss
sss

八、比较文件diff

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

  • diff 命令的输出被保存在一种叫做“补丁”的文件中
  • 使用 -u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

示例:

[root@ansibledata]#diff -u f1 f2
--- f1	2019-11-08 17:05:58.956592311 +0800
+++ f2	2019-11-08 17:06:09.556591856 +0800
@@ -1,4 +1,4 @@
 aa
-bb
+bbb
 ccc
-eee
+ee
[root@ansibledata]#cat f1
aa
bb
ccc
eee
[root@ansibledata]#cat f2
aa
bbb
ccc
ee

patch 复制在其它文件中进行的改变(要谨慎使用)
适用 -b 选项来自动备份改变了的文件

示例:

[root@ansibledata]#cat f1
aa
bb
ccc
eee
[root@ansibledata]#cat f2
aa
bbb
ccc
ee
[root@ansibledata]#diff -u f1 f2 > diff.log 将文件备份
[root@ansibledata]#rm -f f2  删除f2
[root@ansibledata]#patch -b f1 diff.log 复制f1
patching file f1
[root@ansibledata]#cat f1  此时的f1是之前的f2内容
aa
bbb
ccc
ee
[root@ansibledata]#cat f1.orig  f2.orig是之前的f1内容
aa
bb
ccc
eee

 

  

 

 

 

 

 

posted @ 2019-11-08 17:16  一叶知秋~~  阅读(807)  评论(0编辑  收藏  举报