【第二章】(5)新手必须掌握的Linux命令之《文本文件编辑命令》


🧊1.cat命令

cat 命令用于查看纯文本文件(内容较少的),英文全称为“concatenate”

语法格式:“cat [参数] 文件名称”。

如果在查看文本内容时还想顺便显示行号的话,不妨在 cat 命令后面追加一个-n 参数:

[root@linuxprobe~]# cat -n initial-setup-ks.cfg
1 #version=RHEL8
2 # X Window System configuration information
3 xconfig --startxonboot
4 # License agreement
5 eula --agreed
6 # Use graphical install
7 graphical
8 # Network information
9 network --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --
no-activate
10 network --bootproto=dhcp --hostname=localhost.localdomain
11 repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
12 ignoredisk --only-use=sda
13 # Use CDROM installation media
14 cdrom
15 # Run the Setup Agent on first boot
16 firstboot --enable
17 # System services
………………省略部分输出信息………………

🧊2.more命令

more 命令用于查看纯文本文件(内容较多的)

语法格式:“more [参数] 文件名称”。

​ 如果需要阅读长篇小说或者非常长的配置文件,那么“小猫咪”可就真的不适合了。因为一旦使用 cat 命令阅读长篇的文本内容,信息就会在屏幕上快速翻滚,导致自己还没有来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用 more 命令来查看。

more 命令类似 cat ,不过会以一页一页的使用百分比的形式来提示您已经阅读了多少内容,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h 。

参数

  • -num 一次显示的行数
  • -d 提示使用者,在画面下方显示 [Press space to continue, ‘q’ to quit.] ,如果使用者按错键,则会显示 [Press ‘h’ for instructions.] 而不是 ‘哔’ 声
  • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
  • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
  • -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行
  • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
  • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
  • +num 从第 num 行开始显示
  • fileNames 欲显示内容的文档,可为复数个数

实例:

逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。

more -s testfile

从第 20 行开始显示 testfile 之文档内容。

more +20 testfile

常用操作命令

  • Enter 向下n行,需要定义。默认为1行
  • Ctrl+F 向下滚动一屏
  • 空格键 向下滚动一屏
  • Ctrl+B 返回上一屏
  • = 输出当前行的行号
  • :f 输出文件名和当前行的行号
  • V 调用vi编辑器
  • !命令 调用Shell,并执行命令
  • q 退出more

🧊3.head命令

head 命令用于查看纯文本文件的前 N

语法格式:“head [参数] 文件名称”。

​ 在阅读文本内容时,谁也难以保证会按照从头到尾的顺序往下看完整个文件。如果只想查看文本中前 10 行的内容,该怎么办呢?head 命令就能派上用场了:

[root@linuxprobe~]# head -n 5 initial-setup-ks.cfg
#version=RHEL8
# X Window System configuration information
xconfig --startxonboot
# License agreement
eula --agreed

🧊4.tail命令

tail 命令用于查看纯文本文件的后 N持续刷新文件的最新内容

语法格式:“tail [参数] 文件名称”。

查看文本内容的最后 5 行:

[root@linuxprobe~]# tail -n 5 initial-setup-ks.cfg
%addon com_redhat_subscription_manager
%end
%addon ADDON_placeholder --disable --reserve-mb=auto
%end

持续刷新一个文件的内容,实时查看最新的日志文件时,命令格式为“tail -f 文件名称”:

[root@linuxprobe~]# tail -f /var/log/messages
Sep 15 00:14:01 localhost rsyslogd[1392]: imjournal: sd_journal_get_cursor()
failed: Cannot assign requested address [v8.37.0-9.el8]
Sep 15 00:14:06 localhost systemd[1]: Started SSSD Kerberos Cache Manager.
Sep 15 00:14:06 localhost sssd[kcm][3989]: Starting up

🧊5.tr命令

tr 命令用于替换文本内容中的字符,英文全称为“translate”

语法格式:“tr [原始字符] [目标字符]”。

​ 快速地替换文本中的一些词汇,又或者想把整个文本内容都进行替换。可以先使用 cat 命令读取待处理的文本,然后通过管道符(详见第 3章)把这些文本内容传递给 tr 命令进行替换操作即可。

例如,把某个文本内容中的英文全部替换为大写:

[root@linuxprobe~]# cat anaconda-ks.cfg | tr [a-z] [A-Z]
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --ALL --INITLABEL --DRIVES=SDA
# USE GRAPHICAL INSTALL
GRAPHICAL
REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM

🧊6.wc命令

wc 命令用于统计指定文本文件的行数、字数或字节数,英文全称为“word counts”

语法格式为“wc [参数] 文件名称”。

可以联想到上厕所时好无聊,无聊到数完了手中的如厕读物上有多少行字。

wc 的参数以及相应的作用如表 2-14 所示。

image-20230215172930299

​ 在 Linux 系统中,/etc/passwd 是用于保存所有用户信息的文件,要统计当前系统中有多少个用户,可以使用下面的命令来进行查询。

[root@linuxprobe~]# wc -l /etc/passwd
45 /etc/passwd

🧊7.stat命令

stat 命令用于查看文件的具体存储细节和时间等信息,英文全称为“status”

语法格式为“stat 文件名称”。

​ 大家都知道,文件有一个修改时间。其实,除了修改时间之外,Linux 系统中的文件包含 3 种时间状态,分别是 Access Time(内容最后一次被访问的时间,简称为 Atime),ModifyTime(内容最后一次被修改的时间,简称为 Mtime)以及 Change Time(文件属性最后一次被修改的时间,简称为 Ctime)。

下面使用 state 命令查看文件的这 3 种时间状态信息:

[root@linuxprobe ~]# stat anaconda-ks.cfg
File: anaconda-ks.cfg
Size: 1407 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35321091 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2020-07-21 05:16:52.347279499 +0800
Modify: 2020-07-21 05:09:16.421009316 +0800
Change: 202

🧊8.grep命令

grep 命令用于按行提取文本内容

语法格式为“grep [参数] 文件名称”。

grep 命令是用途最广泛的文本搜索匹配工具。它虽然有很多参数,但是大多数基本上都用不到。这里只讲 grep 命令两个最常用的参数:

  • -n 参数用来显示搜索到的信息的行号;

  • -v 参数用于反选信息(即没有包含关键词的所有信息行)。

​ 这两个参数几乎能完成您日后 80%的工作需要,至于其他上百个参数,即使以后在工作期间遇到了,再使用 man grep 命令查询也来得及。

grep 命令的参数及其作用如表 2-15 所示。

image-20230215173750864

​ 在 Linux 系统中,/etc/passwd 文件保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用 grep 命令查找出当前系统中不允许登录系统的所有用户的信息:

[root@linuxprobe ~]# grep /sbin/nologin /etc/passwd
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
………………省略部分输出过程信息………………

🧊9.cut命令

cut 命令用于按“列”提取文本内容

语法格式为“cut [参数] 文件名称”。

系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:

[root@linuxprobe~]# head -n 2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

​ 一般而言,按基于“行”的方式来提取数据是比较简单的,只需要设置好要搜索的关键词即可。但是如果按“列”搜索,不仅要使用-f 参数设置需要查看的列数,还需要使用-d 参数来设置间隔符号。

​ 接下来使用下述命令尝试提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

[root@linuxprobe~]# cut -d : -f 1 /etc/passwd
root
bin
daemon
lp
mail
operator
games
ftp
………………省略部分输出信息………………

🧊10.diff命令

diff 命令用于比较多个文件之间内容的差异,英文全称为“different”

语法格式为“diff [参数] 文件名称 A 文件名称 B”。

​ 在使用 diff 命令时,不仅可以使用--brief 参数来确认两个文件是否相同,还可以使用-c参数来详细比较出多个文件的差异之处。这绝对是判断文件是否被篡改的有力神器。

​ 例如,先使用 cat 命令分别查看 diff_A.txt 和 diff_B.txt 文件的内容,然后进行比较:

[root@linuxprobe~]# cat diff_A.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe~]# cat diff_B.txt
Welcome tooo linuxprobe.com
Red Hat certified
Free Linux LeSSonS
.....
Professional guidance
Linux Course

接下来使用 diff --brief 命令显示比较后的结果,判断文件是否相同:

[root@linuxprobe~]# diff --brief diff_A.txt diff_B.txt
Files diff_A.txt and diff_B.txt differ

最后使用带有-c 参数的 diff 命令来描述文件内容具体的不同:

[root@linuxprobe~]# diff -c diff_A.txt diff_B.txt
*** diff_A.txt 2020-08-30 18:07:45.230864626 +0800
--- diff_B.txt 2020-08-30 18:08:52.203860389 +0800
***************
*** 1,5 ****
! Welcome to linuxprobe.com
Red Hat certified
! Free Linux Lessons
Professional guidance
Linux Course
--- 1,7 ----
! Welcome tooo linuxprobe.com
!
Red Hat certified
! Free Linux LeSSonS
! .....
Professional guidance
Linux Course

🧊11.uniq命令

uniq 命令用于去除文本中连续的重复行,英文全称为“unique”

语法格式为“uniq [参数] 文件名称”。

​ 由 uniq 命令的英文全称 unique(独特的,唯一的)可知,该命令的作用是用来去除文本文件中连续的重复行,中间不能夹杂其他文本行(非相邻的默认不会去重)—去除了重复的,保留的都是唯一的,自然也就是“独特的”“唯一的”了。

​ 我们使用 uniq 命令对两个文本内容进行操作,区别一目了然:

[root@linuxprobe~]# cat uniq.txt
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@linuxprobe~]# uniq uniq.txt
Welcome to linuxprobe.com
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course

🧊12.sort命令

sort 命令用于对文本内容进行再排序

语法格式为“sort [参数] 文件名称

​ 有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用 sort 命令就再合适不过了,它能够对文本内容进行再次排序。这个命令千万不能只讲理论,一定要借助于实战让大家一看就懂。

sort 命令的参数及其作用如表 2-16 所示。

image-20230215175203251

首先,在执行 sort 命令后默认会按照字母顺序进行排序,非常方便:

[root@linuxprobe~]# cat fruit.txt
banana
pear
apple
orange
raspaberry
[root@linuxprobe~]# sort fruit.txt
apple
banana
orange
pear
raspaberry

​ 此外,与 uniq 命令不同,sort 命令是无论内容行之间是否夹杂有其他内容,只要有两个一模一样的内容行,立马就可以使用-u 参数进行去重操作:

[root@linuxprobe~]# cat sort.txt
Welcome to linuxprobe.com
Red Hat certified
Welcome to linuxprobe.com
Free Linux Lessons
Linux Course
[root@linuxprobe~]# sort -u sort.txt
Free Linux Lessons
Red Hat certified
Welcome to linuxprobe.com

​ 想对数字进行排序?一点问题都没有,而且完全不用担心出现 1 大于 20 这种问题(因为有些命令只比较数字的第一位,忽略了十、百、千的位):

[root@linuxprobe~]# cat number.txt
45
12
3
98
82
67
24
56
9
[root@linuxprobe~]# sort -n number.txt
3
9
12
24
45
56
67
82
98

​ 最后,我们挑战一个“高难度”的小实验。下面的内容节选自/etc/passwd 文件中的前 5个字段,并且进行了混乱排序。

[root@linuxprobe~]# cat user.txt
tss:x:59:59: used by the trousers package to sandbox the tcsd daemon
polkitd:x:998:996:User for polkitd
geoclue:x:997:995:User for geoclue
rtkit:x:172:172:RealtimeKit
pulse:x:171:171:PulseAudio System Daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
unbound:x:996:991:Unbound DNS resolver
rpc:x:32:32:Rpcbind Daemon
gluster:x:995:990:GlusterFS daemons

​ 不难看出,上面其实是 5 个字段,各个字段之间是用了冒号进行间隔,如果想以第 3 个字段中的数字作为排序依据,那么可以用-t 参数指定间隔符,用-k 参数指定第几列,用-n 参数进行数字排序来搞定:

[root@linuxprobe~]# sort -t : -k 3 -n user.txt
rpc:x:32:32:Rpcbind Daemon
tss:x:59:59:used by the trousers package to sandbox the tcsd daemon
qemu:x:107:107:qemu user
usbmuxd:x:113:113:usbmuxd user
pulse:x:171:171:PulseAudio System Daemon
rtkit:x:172:172:RealtimeKit
gluster:x:995:990:GlusterFS daemons
unbound:x:996:991:Unbound DNS resolver
geoclue:x:997:995:User for geoclue
polkitd:x:998:996:User for polkitd

在这里插入图片描述

  1. CentOS7+VMware 14的安装教程
  2. 了解系统内核和 Shell 终端的关系与作用
  3. 新手必须掌握的Linux命令之《常用系统工作命令》
  4. 新手必须掌握的Linux命令之《系统状态检查命令》
  5. 新手必须掌握的Linux命令之《查找定位文件命令》
  6. 新手必须掌握的Linux命令之《文本文件编辑命令》
  7. 新手必须掌握的Linux命令之《文件目录管理命令》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小满@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值