概述
6 Linux文本处理命令1(cat、more、head、less、tail、grep)
- Linux 中,文本处理无非是对文本内容做查看、修改等操作。Linux中的文本处理命令,可以实现对文本内容做自动化的处理,而不是手工处理
6.1 cat命令:连接文件并打印输出到标准输出设备
- cat [concatenate(连接、连续)]:命令可以用来显示文本文件的内容(类似于 DOS 下的 type 命令),也可以把几个文件内容附加到另一个文件中,即连接合并文件。cat 命令的基本格式如下:
[root@CncLucZK ~]# cat [选项] 文件名
或者
[root@CncLucZK ~]# cat 文件1 文件2 > 文件3
- cat 由第一行开始显示文件内容
- tac 文件名:从最后一行开始显示,可以看出 tac 是 cat 的倒着写!
- 以使用 *man [命令]*来查看各个命令的使用文档,如 :man cp。
-
这两种格式中,前者用于显示文件的内容,常用选项及各自的含义下表所示;而后者用于连接合并文件。
选项 含义 -A 相当于 -vET 选项的整合,用于列出所有隐藏符号; -E 列出每行结尾的回车符 $; -n 对输出的所有行进行编号; -b 同 -n 不同,此选项表示只对非空行进行编号。 -T 把 Tab 键 ^I 显示出来; -V 列出特殊字符; -s 当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。
注意,cat 命令用于查看文件内容时,不论文件内容有多少,都会一次性显示。如果文件非常大,那么文件开头的内容就看不到了。不过 Linux 可以使用
PgUp+上箭头
组合键向上翻页,但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。因此,cat 命令适合查看不太大的文件。当然,在 Linux 中是可以使用其他的命令或方法来查看大文件的
- 直接查看文件的内容
[root@CncLucZK test]# cat demo2.txt
hello world!
123456abcdef
12345ABCDEF
[root@CncLucZK test]# cat tmp.txt
123456
临时文件
[root@CncLucZK test]# cat demo2.txt tmp.txt>demo.txt #将demo2.txt和tmp.txt内容合并后输出到文件demo.txt(新增文件)
[root@CncLucZK test]# cat demo.txt
hello world!
123456abcdef
12345ABCDEF
123456
临时文件
#cat和tac区别:
[root@CncLucZK test]# cat demo2.txt
hello world 1!
hello world 2!
hello world 3!
hello world 4!
hello world 5!
hello world 6!
[root@CncLucZK test]# tac demo2.txt
hello world 6!
hello world 5!
hello world 4!
hello world 3!
hello world 2!
hello world 1!
- 如果使用 “-A” 选项,则相当于使用了 “-vET” 选项,可以查看文本中的所有隐藏符号,包括回车符($)、Tab 键(^I)等
#如果使用 "-n" 选项,则会显示行号
[root@CncLucZK test]# cat -An demo.txt
1 hello world!$
2 123456abcdef$
3 12345ABCDEF$
4 $
5 $
6 123456$
7 M-dM-8M-4M-fM-^WM-6M-fM-^VM-^GM-dM-;M-6$
8 $
#同 -n 不同,此选项表示只对非空行进行编号。
[root@CncLucZK test]# cat -Ab demo.txt
1 hello world!$
2 123456abcdef$
3 12345ABCDEF$
$
$
4 123456$
5 M-dM-8M-4M-fM-^WM-6M-fM-^VM-^GM-dM-;M-6$
$
#当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行。
[root@CncLucZK test]# cat -Abs demo.txt
1 hello world!$
2 123456abcdef$
3 12345ABCDEF$
$
4 123456$
5 M-dM-8M-4M-fM-^WM-6M-fM-^VM-^GM-dM-;M-6$
$
6.2 more命令:分页显示文件内容
-
使用 cat 命令查看文件内容时,如果文件过大,以至使用
PgUp+上箭头
组合键向上翻页也无法看全文件中的内容。这就需要使用 more 命令。 -
more 命令可以分页显示文本文件的内容,使用者可以逐页阅读文件中内容,此命令的基本格式如下:
[root@CncLucZK ~]# more [选项] 文件名
- more 命令比较简单,一般不用什么选项,常见的选项。
选项 | 含义 |
---|---|
-f | 计算行数时,以实际的行数,而不是自动换行过后的行数。 |
-p | 不以卷动的方式显示每一页,而是先清除屏幕后再显示内容。 |
-c | 跟 -p 选项相似,不同的是先显示内容再清除其他旧资料。 |
-s | 当遇到有连续两行以上的空白行时,就替换为一行的空白行。 |
-u | 不显示下引号(根据环境变量 TERM 指定的终端而有所不同)。 |
+n | 从第 n 行开始显示文件内容,n 代表数字。 |
-n | 一次显示的行数,n 代表数字。 |
- more 命令的执行会打开一个交互界面,因此读者有必要了解一些交互命令,常用的交互命令如下表所示。
交互指令 | 功能 |
---|---|
h 或 ? | 显示 more 命令交互命令帮助。 |
q 或 Q | 退出 more。 |
v | 在当前行启动一个编辑器。 |
:f | 显示当前文件的文件名和行号。 |
!<命令> 或 :!<命令> | 在子Shell中执行指定命令。 |
回车键 | 向下移动一行。 |
空格键 | 向下移动一页。 |
Ctrl+l | 刷新屏幕。 |
= | 显示当前行的行号。 |
’ | 转到上一次搜索开始的地方。 |
Ctrf+f | 向下滚动一页。 |
. | 重复上次输入的命令。 |
/ 字符串 | 搜索指定的字符串。 |
d | 向下移动半页。 |
b 或 [ctrl]-b | 向上移动一页,不过这动作只对文件有用,对管线无用。 |
- 用分页的方式显示demo.txt文件的内容。
[root@CncLucZK test]# more -5csu demo.txt #以5行为一页进行显示
#### 二、为什么用户需要快照?
1. 快照提供了一种便捷通用的备份方式,用户通过设置自动快照策略,可以实现云
服务器上的磁盘自动化数据备份;
--More--(8%)
2. 若因病毒感染/误操作/被人为攻击等原因造成的数据丢失,可通过快照回滚恢复 #d向下移动半页。
某一个快照时间点的数据;
3. 当您在磁盘上进行数据的写入和存储时,希望使用某块磁盘上的数据作为其他磁
盘的基础数据时,快照是最为便捷的方式,没有之一。
#### 三、阿里云不是承诺存储数据可靠性12个9吗,为什么我们还要用快照?
- 这是两码事,虽然阿里云提供了安全的存储方式,但如果存储在磁盘上的数据本身
就是错误的数据,比如由于应用错误导致的数据错误,或者黑客利用应用漏洞进行恶
意读写,那么就需要快照等功能来保证数据出现问题时能够恢复之前的状态。
- 可靠性是从存储的稳定性角度谈的,是硬件保障,而快照则是一种软件保险。
--More--(42%)
6.3 head命令:显示文件开头的内容
- head 命令可以显示指定文件前若干行的文件内容,其基本格式如下:
[root@CncLucZK ~]# head [选项] 文件名
- 该命令常用选项以及各自的含义,如下表所示。
选项 | 含义 |
---|---|
-n K | 这里的 K 表示行数,该选项用来显示文件前 K 行的内容;如果使用 “-K” 作为参数,则表示除了文件最后 K 行外,显示剩余的全部内容。 |
-c K | 这里的 K 表示字节数,该选项用来显示文件前 K 个字节的内容;如果使用 “-K”,则表示除了文件最后 K 字节的内容,显示剩余全部内容。 |
-v | 显示文件名; |
-
注意,如不设置显示的具体行数,则默认显示 10 行的文本数据。
-
基本用法。
[root@CncLucZK test]# head -n 5 demo.txt
#### 二、为什么用户需要快照?
1. 快照提供了一种便捷通用的备份方式,用户通过设置自动快照策略,可以实现云服务器上的磁盘自动化数据备份;
2. 若因病毒感染/误操作/被人为攻击等原因造成的数据丢失,可通过快照回滚恢复某一个快照时间点的数据;
[root@CncLucZK test]# head -5 demo.txt
#### 二、为什么用户需要快照?
1. 快照提供了一种便捷通用的备份方式,用户通过设置自动快照策略,可以实现云服务器上的磁盘自动化数据备份;
2. 若因病毒感染/误操作/被人为攻击等原因造成的数据丢失,可通过快照回滚恢复某一个快照时间点的数据;
6.4 less命令:查看文件内容
-
less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容,不同之处在于,使用 more 命令浏览文件内容时,只能不断向后翻看,而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
-
不仅如此,为了方面用户浏览文本内容,less 命令还提供了以下几个功能:
- 使用光标键可以在文本文件中前后(左后)滚屏;
- 用行号或百分比作为书签浏览文件;
- 提供更加友好的检索、高亮显示等操作;
- 兼容常用的字处理程序(如 Vim、Emacs)的键盘操作;
- 阅读到文件结束时,less 命令不会退出;
- 屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。
-
less 命令的基本格式如下:
[root@CncLucZK ~]# less [选项] 文件名
-
此命令可用的选项以及各自的含义如表 1 所示。
选项 选项含义 -N 显示每行的行号。 -S 行过长时将超出部分舍弃。 -e 当文件显示结束后,自动离开。 -g 只标志最后搜索到的关键同。 -Q 不使用警告音。 -i 忽略搜索时的大小写。 -m 显示类似 more 命令的百分比。 -f 强迫打开特殊文件,比如外围设备代号、目录和二进制文件。 -s 显示连续空行为一行。 -b <缓冲区大小> 设置缓冲区的大小。 -o <文件名> 将 less 输出的内容保存到指定文件中。 -x <数字> 将【Tab】键显示为规定的数字空格。 -
在使用 less 命令查看文件内容的过程中,和 more 命令一样,也会进入交互界面,因此需要读者掌握一些常用的交互指令,如下表所示。
交互指令 | 功能 |
---|---|
/字符串 | 向下搜索“字符串”的功能。 |
?字符串 | 向上搜索“字符串”的功能。 |
n | 重复*前一个搜索(与 / 成 ? 有关),向下查找。 |
N | 反向重复前一个搜索(与 / 或 ? 有关),向上查找。 |
b | 向上移动一页。 |
d | 向下移动半页。 |
h 或 H | 显示帮助界面。 |
q 或 Q | 退出 less 命令。 |
y | 向上移动一行。 |
空格键 | 向下移动一页。 |
回车键 | 向下移动一行。 |
【PgDn】键 | 向下移动一页。 |
【PgUp】键 | 向上移动一页。 |
Ctrl+f | 向下移动一页。 |
Ctrl+b | 向上移动一页。 |
Ctrl+d | 向下移动一页。 |
Ctrl+u | 向上移动半页。 |
j | 向下移动一行。 |
k | 向上移动一行。 |
G | 移动至最后一行。 |
g | 移动到第一行。 |
ZZ | 退出 less 命令。 |
v | 使用配置的编辑器编辑当前文件。 |
[ | 移动到本文档的上一个节点。 |
] | 移动到本文档的下一个节点。 |
p | 移动到同级的上一个节点。 |
u | 向上移动半页。 |
- 使用 less 命令查看 demo.txt 文件中的内容。
[root@CncLucZK test]# less -5NQms demo.txt #文档显示m百分比
1 #### 二、为什么用户需要快照?
2
3 1. 快照提供了一种便捷通用的备份方式,用户通过设置自动快照策略,可
3 以实现云服务器上的磁盘自动化数据备份;
4
5 2. 若因病毒感染/误操作/被人为攻击等原因造成的数据丢失,可通过快照
5 回滚恢复某一个快照时间点的数据;
6 3. 当您在磁盘上进行数据的写入和存储时,希望使用某块磁盘上的数据作
6 为其他磁盘的基础数据时,快照是最为便捷的方式,没有之一。
7
8 #### 三、阿里云不是承诺存储数据可靠性12个9吗,为什么我们还要用快照
48%
[root@CncLucZK test]# less -Ns demo.txt #不用显示m百分比,则文档最后显示:
#### 二、为什么用户需要快照?
1. 快照提供了一种便捷通用的备份方式,用户通过设置自动快照策略,可以实现云
服务器上的磁盘自动化数据备份;
2. 若因病毒感染/误操作/被人为攻击等原因造成的数据丢失,可通过快照回滚恢复
某一个快照时间点的数据;
3. 当您在磁盘上进行数据的写入和存储时,希望使用某块磁盘上的数据作为其他磁
盘的基础数据时,快照是最为便捷的方式,没有之一。
#### 三、阿里云不是承诺存储数据可靠性12个9吗,为什么我们还要用快照?
- 这是两码事,虽然阿里云提供了安全的存储方式,但如果存储在磁盘上的数据本身就是错误的数据,比如由于应用错误导致的数据错误,或者黑客利用应用漏洞进行恶意读写,那么就需要快照等功能来保证数据出现问题时能够恢复之前的状态。
- 可靠性是从存储的稳定性角度谈的,是硬件保障,而快照则是一种软件保险。
#### 四、快照还能用来做什么?
1. 克隆云服务器:如果需要再创建一台云服务器与目前已有云服务器的系统或数据
状态保持一致,可以将系统盘做成自定义镜像,数据盘做成快照,然后再新购买云服务器时镜像选择该自定义镜像,安全组的规则配置与原云服务器一致的规则,就可以创建一台基于原云服务器“此刻状态”的新云服务器
:
可以看到,less 在屏幕底部显示一个冒号(:),等待用户输入命令,比如说,用户想向下翻一页,可以按空格键;如果想向上翻一页,可以按 b 键。
6.5 tail命令:显示文件结尾的内容
- tail 命令和 head 命令正好相反,它用来查看文件末尾的数据,其基本格式如下:
[root@CncLucZK ~]# tail [选项] 文件名
-
此命令常用的选项及含义如下表所示。
选项 含义 -nK 这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。默认是10行 -cK 这里的 K 指的是字节数,该选项表示输出文件最后 K 个字节的内容,在此基础上,使用 -c +K 则表示从文件第 K 个字节开始输出。 -f 输出文件变化后新增加的数据。ctrl+c 退出监听界面 -
查看demo.txt 文件最后 3 行的数据内容,使用
tail -n 3 demo.txt
命令和 `tail -3 demo.txt 的效果是一样的。
[root@CncLucZK test]# tail -2 demo.txt
4. 定期创建快照,避免因操作失误或外部攻击等原因导致数据丢失。例如,团队成员不慎在云盘上存储了错误的数据、ECS实例被误释放。应用错误导致了数据错误、或者骇客利用应用漏洞恶意删除业务数据等。
5. 执行重要操作前创建一份快照,常见的重要运维操作包括更换操作系统、应用软件升级或业务数据迁移等。
[root@CncLucZK test]# tail -n2 demo.txt
4. 定期创建快照,避免因操作失误或外部攻击等原因导致数据丢失。例如,团队成员不慎在云盘上存储了错误的数据、ECS实例被误释放。应用错误导致了数据错误、或者骇客利用应用漏洞恶意删除业务数据等。
5. 执行重要操作前创建一份快照,常见的重要运维操作包括更换操作系统、应用软件升级或业务数据迁移等。
- 查看 demo.txt 文件末尾 50个字节的数据内容。
[root@CncLucZK test]# tail -c50 demo.txt
、应用软件升级或业务数据迁移等。
- “-f” 选项来监听文件的新増内容。显示文件的最后 3 行内容,而且光标不会退出命令,每隔一秒会检查一下文件是否增加新的内容,如果增加就追加到原来的输出结果后面并显示。因此,这时如果向文件中追加一些数据(需要开启一个新终端):
[root@CncLucZK test]# tail -3f demo.txt
3. 提高容错率:出现操作失误时,能及时回滚数据,降低操作风险,实现版本回退。
4. 定期创建快照,避免因操作失误或外部攻击等原因导致数据丢失。例如,团队成员不慎在云盘上存储了错误的数据、ECS实例被误释放。应用错误导致了数据错误、或者骇客利用应用漏洞恶意删除业务数据等。
5. 执行重要操作前创建一份快照,常见的重要运维操作包括更换操作系统、应用软件升级或业务数据迁移等。
- 新终端向 demo.txt添加文本
echo定向到一些文件中输入字符串
[root@CncLucZK test]# echo 我是新增的一行文本 >> demo.txt
[root@CncLucZK test]# echo 我是新增的一行文本 >> demo.txt
[root@CncLucZK test]# echo 我是新增的第二行文本 >> demo.txt
- 那么,在原始的正在监听的终端中,会看到如下信息:
[root@CncLucZK test]# tail -3f demo.txt
3. 提高容错率:出现操作失误时,能及时回滚数据,降低操作风险,实现版本回退。
4. 定期创建快照,避免因操作失误或外部攻击等原因导致数据丢失。例如,团队成员不慎在云盘上存储了错误的数据、ECS实例被误释放。应用错误导致了数据错误、或者骇客利用应用漏洞恶意删除业务数据等。
5. 执行重要操作前创建一份快照,常见的重要运维操作包括更换操作系统、应用软件升级或业务数据迁移等。
我是新增的一行文本
我是新增的一行文本
我是新增的第二行文本
6.6 grep命令详解:查找文件内容
-
不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行,要实现这个目的,可以使用 grep 命令。
-
grep 命令的由来可以追溯到 UNIX 诞生的早期,在 UNIX 系统中,搜索的模式(patterns)被称为正则表达式(regular expressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global(全面的),一旦找到相匹配的内容,用户就像将其输出(print)到屏幕上,而将这一系列的操作整合到一起就是 global regular expressions print,而这也就是 grep 命令的全称。
-
grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。
-
正则表达式是描述一组字符串的一个模式,正则表达式的构成模仿了数学表达式,通过使用操作符将较小的表达式组合成一个新的表达式。正则表达式可以是一些纯文本文字,也可以是用来产生模式的一些特殊字符。为了进一步定义一个搜索模式,grep 命令支持如下表所示的这几种正则表达式的元字符(也就是通配符)。
通配符 | 功能 |
---|---|
c* | 将匹配 0 个(即空白)或多个字符 c(c 为任一字符)。 |
. | 将匹配任何一个字符,且只能是一个字符。 |
[xyz] | 匹配方括号中的任意一个字符。 |
[^xyz] | 匹配除方括号中字符外的所有字符。 |
^ | 锁定行的开头。 |
$ | 锁定行的结尾。 |
注意的是,在基本正则表达式中,如通配符 *、+、{、|、( 和 )等,已经失去了它们原本的含义,而若要恢复它们原本的含义,则要在之前添加反斜杠 ,如
*、+、{、|、( 和 )
。grep 命令是用来在每一个文件或中(或特定输出上)搜索特定的模式,当使用 grep 时,包含指定字符模式的每一行内容,都会被打印(显示)到屏幕上,但是使用 grep 命令并不改变文件中的内容。
- grep 命令的基本格式如下:
[root@CncLucZK ~]# grep [选项] 模式 文件名
- 这里的模式,要么是字符(串),要么是正则表达式。而此命令常用的选项以及各自的含义:
选项 | 含义 |
---|---|
-c | 仅列出文件中包含模式的行数。 |
-i | 忽略模式中的字母大小写。 |
-l | 列出带有匹配行的文件名。 |
-n | 在每一行的最前面列出行号。 |
-v | 列出没有匹配模式的行。 |
-w | 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。 |
注意:如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。
- 可以搜索demo.txt demotmo.txt两文件中带有345数字的总行号
[root@CncLucZK test]# grep -cw [345] demo.txt demotmo.txt
demo.txt:4
demotmo.txt:4
#搜索demo.txt两文件中带有345数字的内容行
[root@CncLucZK test]# grep [34] demo.txt
3. 当您在磁盘上进行数据的写入和存储时,希望使用某块磁盘上的数据作为其他磁盘的基础数据时,快照是最为便捷的方式,没有之一。
3. 提高容错率:出现操作失误时,能及时回滚数据,降低操作风险,实现版本回退。
4. 定期创建快照,避免因操作失误或外部攻击等原因导致数据丢失。例如,团队成员不慎在云盘上存储了错误的数据、ECS实例被误释放。应用错误导致了数据错误、或者骇客利用应用漏洞恶意删除业务数据等。
grep 命令的功能非常强大,通过利用它的不同选项以及变化万千的正则表达式,可以获取任何我们所需要的信息。
参考文献:
Linux grep命令详解:查找文件内容
Linux 文件内容查看
下一篇:Linux学习-14-Linux文本处理命令(sed)
最后
以上就是高挑热狗为你收集整理的Linux学习-13-Linux文本处理命令(cat、more、head、less、tail、grep)的全部内容,希望文章能够帮你解决Linux学习-13-Linux文本处理命令(cat、more、head、less、tail、grep)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复