Linux学习-13-Linux文本处理命令(cat、more、head、less、tail、grep)

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 Linux学习-13-Linux文本处理命令(cat、more、head、less、tail、grep),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

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)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123778.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!