Linux文本文件编辑命令

1.cat命令

cat命令用于查看纯文本文件(内容较少的),英文全称为"concatenate",语法格式为"cat [参数 文件名称]"。

在cat命令后面追加一个 -n 参数,可以显示文本内容的行号:

[root@localhost ~]# 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 --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
    18	services --disabled="chronyd"
    19	# Keyboard layouts
    20	keyboard --vckeymap=us --xlayouts='us'
    21	# System language
    22	lang en_US.UTF-8

2.more命令

more命令用于查看纯文本文件(内容较多的),语法格式为"more [参数]文件名称"。

使用cat命令阅读长篇的文本内容时,信息会在屏幕上快速翻滚,导致自己还没来得及看到,内容就已经翻篇了。因此对于长篇的文本内容,推荐使用more命令来查看。more命令会在最下面使用百分比的形式来提示你已经阅读了多少内容,还可以使用回车键向下翻页。

3.head命令

head命令用于查看纯文本文件的前N行,语法格式为"head [参数] 文件名称"。

[root@localhost ~]# head -n 10 initial-setup-ks.cfg 
#version=RHEL8
# X Window System configuration information
xconfig  --startxonboot
# License agreement
eula --agreed
# Use graphical install
graphical
# Network information
network  --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --activate
network  --bootproto=dhcp --hostname=localhost.localdomain

4.tali命令

tali命令用于查看纯文本文件的后N行或持续刷新文件的最新内容,语法格式为"tali [参数] 文件名称"。

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

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

使用"tail -f 文件名称"能够持续刷新一个文件的内容,想要实时查看最新的日志文件时非常有用:

[root@localhost ~]# tail -f /var/log/messages 
Oct 20 16:56:16 localhost systemd[1]: Starting dnf makecache...
Oct 20 16:56:28 localhost dnf[24491]: Updating Subscription Management repositories.
Oct 20 16:56:28 localhost dnf[24491]: Unable to read consumer identity
Oct 20 16:56:28 localhost dnf[24491]: This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Oct 20 16:56:28 localhost dnf[24491]: Repository AppStream is listed more than once in the configuration
Oct 20 16:56:28 localhost dnf[24491]: Repository BaseOS is listed more than once in the configuration
Oct 20 16:56:30 localhost dnf[24491]: AppStream                                        82 kB/s | 3.2 kB     00:00
Oct 20 16:56:33 localhost dnf[24491]: BaseOS                                          301 kB/s | 2.7 kB     00:00
Oct 20 16:56:37 localhost dnf[24491]: Metadata cache created.
Oct 20 16:56:37 localhost systemd[1]: Started dnf makecache.

5.tr命令

tr命令用于替换文本内容中的字符,英文全称为"translate",语法格式为"tr '[原始字符]'  '[目标字符]' "。

在很多时候,我们想要快速地替换文本中的一些词汇,又或者想把整个文本的内容都进行替换。如果进行手工替换,难免工作量太大,尤其是要处理大批量的内容时,进行手工替换更不现实。这时,就可以先使用cat命令读取待处理的文本,然后通过管道符把这些文本内容传递给tr命令进行替换操作即可。例如,把某个文本内容中的英文全部替换为大写:

[root@localhost ~]# cat anaconda-ks.cfg | tr '[a-z]' '[A-Z]'
#VERSION=RHEL8
IGNOREDISK --ONLY-USE=SDA
AUTOPART --TYPE=LVM
# PARTITION CLEARING INFORMATION
CLEARPART --NONE --INITLABEL
# USE GRAPHICAL INSTALL
GRAPHICAL
REPO --NAME="APPSTREAM" --BASEURL=FILE:///RUN/INSTALL/REPO/APPSTREAM
# USE CDROM INSTALLATION MEDIA
CDROM
# KEYBOARD LAYOUTS
KEYBOARD --VCKEYMAP=US --XLAYOUTS='US'
# SYSTEM LANGUAGE
LANG EN_US.UTF-8

6.wc命令

wc命令用于统计指定文本文件的行数、字数或字节数,英文全称为"word counts",语法格式为"wc [参数] 文件名称"。

wc命令中的参数及作用:

参数 作用
-l 只显示行数
-w 只显示字数
-c 只显示字节数

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

[root@localhost ~]# wc -l /etc/passwd
46 /etc/passwd

7.stat命令

stat命令用于查看文件具体存储细节和时间等信息,英文全名为”status“,语法格式为"stat 文件名称"。

文件除了修改时间外,Linux系统中文件包含3种时间状态:

Atime(Access Time):内容最后一次被访问的时间
Mtime(Modify Time):内容最后一次被修改的时间
Ctime(Change Time):文件属性最后一次被修改的时间

使用stat命令查看文件的这3种时间状态:

[root@localhost ~]# stat anaconda-ks.cfg 
  File: anaconda-ks.cfg
  Size: 1392      	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 35312707    Links: 1
Access: (0777/-rwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:admin_home_t:s0
Access: 2022-10-20 17:14:15.448042573 +0800
Modify: 2022-10-19 00:02:51.524964167 +0800
Change: 2022-10-20 17:13:59.975681161 +0800
 Birth: -

8.grep命令

(global search regular expression(RE)and print out the line,全面搜索正则表达式并把结果打印出来)

grep命令用于提取文本内容,语法格式为"grep [参数] 文件名称"。

grep命令是用途最广泛的文本搜索匹配工具,常用的两个参数:

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

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

grep命令的参数及作用:

参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择——仅列出没有关键词的行

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

[root@localhost ~]# 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
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin

9.cut命令

cut命令用于按"列"提取文本内容,语法格式为"cut [参数] 文件名称"。

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

[root@localhost ~]# head -n 5 /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
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

   上图是基于 "行" 的方式来提取数据的,如果要按 "列" 搜索,不仅要使用 -f 参数设置需要查看的列数,还需要使用 -d 参数来设置间隔符号。

提取 passwd 文件种的用户名信息,即提取以冒号(:)为间隔符号的第一列内容:

[root@localhost ~]# cut -d: -f 1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown

10.diff命令

diff命令用于比较多个文件之间的差异,英文全称为"different",语法格式为"diff [参数] 文件名称A 文件名称B"。

在使用diff命令时,不仅可以使用 --brief 参数来确认两个文件是否相同,还可以使用 -c 参数来详细比较出多个文件的差异之处。

先使用cat命令分别查看A.txt 和 B.txt 文件的内容,然后再进行比较:

[root@localhost ~]# cat A.txt 
Welcome to csdn
Red Hat certified
Free Linux Lessons
Professional guidance
Linux Course
[root@localhost ~]# cat B.txt 
Welcome tooo csdn
Red Hat certified
Free Linux LeSSonS
.....
Professional guidance
Linux Course
[root@localhost ~]# diff --brief A.txt B.txt 
Files A.txt and B.txt differ

使用 -c 参数来描述文件内容的具体不同:

[root@localhost ~]# diff -c A.txt B.txt 
*** A.txt	2022-10-20 20:04:38.363382602 +0800
--- B.txt	2022-10-20 20:05:18.465327456 +0800
***************
*** 1,5 ****
! Welcome to csdn
  Red Hat certified
! Free Linux Lessons
  Professional guidance
  Linux Course
--- 1,6 ----
! Welcome tooo csdn
  Red Hat certified
! Free Linux LeSSonS
! .....
  Professional guidance
  Linux Course

11.uniq命令

uniq命令用于出去文本中连续的重复,英文全称为"unique",语法格式为"uniq [参数] 文件名称"。

uniq(unique,唯一的),该命令的作用是用来去除文本文件中连续的重复行,非相邻的的默认不会去重。

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

12.sort命令

sort命令用于对文本内容进行再排序,语法格式为"sort [参数] 文件名称"。

有时文本中的内容顺序不正确,一行行地动手修改太麻烦了。此时使用sort命令就可以对文本内容进行再次排序。

sort命令中的参数及作用:

参数 作用
-f 忽略大小写
-b 忽略缩进与空格
-n 以数值型排序
-r 反向排序
-u 去除重复行
-t 指定间隔符
-k 设置字段范围

在执行sort命令后默认按照字母顺序进行排序:

[root@localhost ~]# cat fruit 
banana
pear
apple
orange
raspaberry
[root@localhost ~]# sort fruit 
apple
banana
orange
pear
raspaberry

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

[root@localhost ~]# cat sort.txt 
Welcome to csdn
Red Hat certified
Welcome to csdn
Free Linux Lessons
Linux Cours
[root@localhost ~]# sort -u sort.txt 
Free Linux Lessons
Linux Cours
Red Hat certified
Welcome to csdn

对数字进行排序,使用 -n 参数:

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

节选 /etc/passed 中的前五个字段,并进行了混乱排序 。

[root@localhost ~]# 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@localhost ~]# 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

你可能感兴趣的:(Linux,linux)