1.cat命令
cat 命令可以用来显示文本文件的内容(类似于 DOS 下的 type 命令),也可以把几个文件内容附加到另一个文件中,即连接合并文件。
语法cat [选项] 文件名
或者cat 文件1 文件2 > 文件3
cat 命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -A | 相当于 -vET 选项的整合,用于列出所有隐藏符号; |
| -E | 列出每行结尾的回车符 $; |
| -n | 对输出的所有行进行编号; |
| -b | 同 -n 不同,此选项表示只对非空行进行编号。 |
| -T | 把 Tab 键 ^I 显示出来; |
| -V | 列出特殊字符; |
| -s | 当遇到有连续 2 行以上的空白行时,就替换为 1 行的空白行 |
注意,cat 命令用于查看文件内容时,不论文件内容有多少,都会一次性显示。 如果文件非常大,那么文件开头的内容就看不到了。不过 linux 可以使用
PgUp+上箭头组合键向上翻页, 但是这种翻页是有极限的,如果文件足够长,那么还是无法看全文件的内容。
示例
cat 命令本身非常简单,我们可以直接查看文件的内容
而如果使用 “-n” 选项,则会显示行号。例如:
将文件 file1.txt 和 file2.txt 的内容合并后输出到文件 file3.txt 中
[root@localhost base]# lsfile1.txt file2.txt[root@localhost base]# cat file1.txthttp://www.yuque.com(file1.txt)[root@localhost base]# cat file2.txtis great(file2.txt)[root@localhost base]# cat file1.txt file2.txt > file3.txt[root@localhost base]# more file3.txt#more 命令可查看文件中的内容http://www.yuque.net(file1.txt)is great(file2.txt)[root@localhost base]# lsfile1.txt file2.txt file3.txt
2.more命令
more 命令可以分页显示文本文件的内容,使用者可以逐页阅读文件中内容
语法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 | 向上移动一页。 |
示例
用分页的方式显示 zookeeper.out 文件的内容
显示文件 zookeeper.out的内容,每 10 行显示一屏,同时清楚屏幕,使用以下命令more -c -10 zookeeper.out
3.head命令
head 命令可以显示指定文件前若干行的文件内容
语法head [选项] 文件名
head 命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -n K | 这里的 K 表示行数,该选项用来显示文件前 K 行的内容;如果使用 “-K” 作为参数,则表示除了文件最后 K 行外,显示剩余的全部内容。 |
| -c K | 这里的 K 表示字节数,该选项用来显示文件前 K 个字节的内容;如果使用 “-K”,则表示除了文件最后 K 字节的内容,显示剩余全部内容。 |
| -v | 显示文件名; |
注意,如不设置显示的具体行数,则默认显示 10 行的文本数据。
示例
基本用法[root@localhost ~]# head zookeeper.out
head 命令默认显示文件的开头 10 行内容。如果想显示指定的行数,则只需使用 “-n” 选项即可,例如:[root@localhost ~]# head -n 20 zookeeper.out
这是显示文件的开头 20 行内容,也可以直接写 “-行数”,例如:[root@localhost ~]# head -20 zookeeper.out
4.less命令
less 命令的作用和 more 十分类似,都用来浏览文本文件中的内容,不同之处在于,
使用 more 命令浏览文件内容时,只能不断向后翻看,
而使用 less 命令浏览,既可以向后翻看,也可以向前翻看。
不仅如此,为了方面用户浏览文本内容,less 命令还提供了以下几个功能:
- 使用光标键可以在文本文件中前后(左后)滚屏;
- 用行号或百分比作为书签浏览文件;
- 提供更加友好的检索、高亮显示等操作;
- 兼容常用的字处理程序(如 Vim、Emacs)的键盘操作;
- 阅读到文件结束时,less 命令不会退出;
- 屏幕底部的信息提示更容易控制使用,而且提供了更多的信息。
语法less [选项] 文件名
less 命令选项及含义
| 选项 | 选项含义 |
|---|---|
| -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 命令查看 zookeeper.out文件中的内容
可以看到,less 在屏幕底部显示一个冒号(:),等待用户输入命令,
比如说,用户想向下翻一页,可以按空格键;如果想向上翻一页,可以按 b 键。
5.tail命令
tail 命令和 head 命令正好相反,它用来查看文件末尾的数据
语法tail [选项] 文件名
tail 命令选项及含义
| 选项 | 含义 |
|---|---|
| -n K | 这里的 K 指的是行数,该选项表示输出最后 K 行,在此基础上,如果使用 -n +K,则表示从文件的第 K 行开始输出。 |
| -c K | 这里的 K 指的是字节数,该选项表示输出文件最后 K 个字节的内容,在此基础上,使用 -c +K 则表示从文件第 K 个字节开始输出。 |
| -f | 输出文件变化后新增加的数据。 |
示例
默认显示最后10行tail zookeeper.out 效果和tail -n 10 zookeeper.out 是一样的。
6.Linux输入输出重定向
我们知道,linux 中标准的输入设备默认指的是键盘,标准的输出设备默认指的是显示器。
所要介绍的输入、输出重定向,完全可以从字面意思去理解,也就是:
- 输入重定向:指的是重新指定设备来代替键盘作为新的输入设备;
- 输出重定向:指的是重新指定设备来代替显示器作为新的输出设备。
通常是用文件或命令的执行结果来代替键盘作为新的输入设备,而新的输出设备通常指的就是文件。
Linux输入重定向
语法
对于输入重定向来说,其需要用到的符号以及作用如表所示
输入重定向中用到的符号及作用
| 命令符号格式 | 作用 |
|---|---|
| 命令 < 文件 | 将指定文件作为命令的输入设备 |
| 命令 << 分界符 | 表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串 |
| 命令 < 文件 1 > 文件 2 | 将文件 1 作为命令的输入设备,该命令的执行结果输出到文件 2 中。 |
示例
例1
默认情况下,cat 命令会接受标准输入设备(键盘)的输入,并显示到控制台,但如果用文件代替键盘作为输入设备,那么该命令会以指定的文件作为输入设备,并将文件中的内容读取并显示到控制台。
以 /etc/passwd 文件(存储了系统中所有用户的基本信息)为例,执行如下命令:
[root@localhost ~]# cat /etc/passwd
#这里省略输出信息
[root@localhost ~]# cat < /etc/passwd
#输出结果同上面命令相同
注意,虽然执行结果相同,但第一行代表是以键盘作为输入设备,
而第二行代码是以 /etc/passwd 文件作为输入设备。
例2
可以看到,当指定了 0 作为分界符之后,只要不输入 0,就可以一直输入数据。
例3
首先,新建文本文件 a.tx,然后执行如下命令:
可以看到,通过重定向 /etc/passwd 作为输入设备,并输出重定向到 a.txt,
最终实现了将 /etc/passwd 文件中内容复制到 a.txt 中。
Linux输出重定向
相较于输入重定向,我们使用输出重定向的频率更高。并且,和输入重定向不同的是,
输出重定向还可以细分为标准输出重定向和错误输出重定向两种技术。
例如,使用 ls 命令分别查看两个文件的属性信息,但其中一个文件是不存在的,如下所示:
上述命令中,demo1.txt 是存在的,因此正确输出了该文件的一些属性信息,这也是该命令执行的标准输出信息;而 demo2.txt 是不存在的,因此执行 ls 命令之后显示的报错信息,是该命令的错误输出信息。
再次强调,要想把原本输出到屏幕上的数据转而写入到文件中,这两种输出信息就要区别对待。
在此基础上,标准输出重定向和错误输出重定向又分别包含清空写入和追加写入两种模式。
因此,对于输出重定向来说,其需要用到的符号以及作用如表所示。
输出重定向用到的符号及作用
| 命令符号格式 | 作用 |
|---|---|
| 命令 > 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,会清空原有数据,再写入新数据。 |
| 命令 2> 文件 (注意不能有空格) |
将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,会清空原有数据,再写入新数据。 |
| 命令 >> 文件 | 将命令执行的标准输出结果重定向输出到指定的文件中,如果该文件已包含数据,新数据将写入到原有内容的后面。 |
| 命令 2>> 文件 | 将命令执行的错误输出结果重定向到指定的文件中,如果该文件中已包含数据,新数据将写入到原有内容的后面。 |
| 命令 >> 文件 2>&1 或者 命令 &>> 文件 |
将标准输出或者错误输出写入到指定文件,如果该文件中已包含数据,新数据将写入到原有内容的后面。注意,第一种格式中,最后的 2>&1 是一体的,可以认为是固定写法。 |
示例
新建一个包含有 “Linux” 字符串的文本文件 Linux.txt,以及空文本文件 demo.txt,然后执行如下命令
yuanliangdeMacBook-Air:~ yuanlang$ cat Linux.txt
yuanzi Linux
yuanliangdeMacBook-Air:~ yuanlang$ touch demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat Linux.txt > demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat demo.txt
yuanzi Linux
yuanliangdeMacBook-Air:~ yuanlang$ cat Linux.txt > demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat demo.txt
yuanzi Linux <--这里的 Linux 是清空原有的 Linux 之后,写入的新的 Linux
yuanliangdeMacBook-Air:~ yuanlang$ cat Linux.txt >> demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat demo.txt
yuanzi Linux
yuanzi Linux <--以追加的方式,新数据写入到原有数据之后
yuanliangdeMacBook-Air:~ yuanlang$ cat b.txt > demo.txt
cat: b.txt: No such file or directory <-- 错误输出信息依然输出到了显示器中
yuanliangdeMacBook-Air:~ yuanlang$ cat b.txt 2> demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat demo.txt
cat: b.txt: No such file or directory <--清空文件,再将错误输出信息写入到该文件中
yuanliangdeMacBook-Air:~ yuanlang$ cat b.txt 2>> demo.txt
yuanliangdeMacBook-Air:~ yuanlang$ cat demo.txt
cat: b.txt: No such file or directory
cat: b.txt: No such file or directory <--追加写入错误输出信息
yuanliangdeMacBook-Air:~ yuanlang$

7.grep命令
很多时候,我们并不需要列出文件的全部内容,而是从文件中找到包含指定信息的那些行, 要实现这个目的,可以使用 grep 命令。
grep 命令作为 linux 文本处理三剑客的一员,另外两个是 sed 和 awk
grep 命令的由来可以追溯到 UNIX 诞生的早期,在 UNIX 系统中,搜索的模式(patterns)被称为正则表达式(regular expressions),为了要彻底搜索一个文件,有的用户在要搜索的字符串前加上前缀 global(全面的),一旦找到相匹配的内容,用户就像将其输出(print)到屏幕上,
而将这一系列的操作整合到一起就是 global regular expressions print,而这也就是 grep 命令的全称。
grep命令能够在一个或多个文件中,搜索某一特定的字符模式(也就是正则表达式),此模式可以是单一的字符、字符串、单词或句子。
正则表达式的通配符
| 通配符 | 功能 |
|---|---|
| c* | 将匹配 0 个(即空白)或多个字符 c(c 为任一字符)。 |
| . | 将匹配任何一个字符,且只能是一个字符。 |
| [xyz] | 匹配方括号中的任意一个字符。 |
| [^xyz] | 匹配除方括号中字符外的所有字符。 |
| ^ | 锁定行的开头。 |
| $ | 锁定行的结尾。 |
需要注意的是,在基本正则表达式中,如通配符 、+、{、|、( 和 )等,已经失去了它们原本的含义,
而若要恢复它们原本的含义,则要在之前添加反斜杠 \,如 \、+、{、|、( 和 )。
语法grep [选项] 模式 文件名
这里的模式,要么是字符(串),要么是正则表达式。而此命令常用的选项以及各自的含义如表所示。
| 选项 | 含义 |
|---|---|
| -c | 仅列出文件中包含模式的行数。 |
| -i | 忽略模式中的字母大小写。 |
| -l | 列出带有匹配行的文件名。 |
| -n | 在每一行的最前面列出行号。 |
| -v | 列出没有匹配模式的行。 |
| -w | 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行。 |
注意,如果是搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名;
而如果搜索单个文件,grep 命令的结果将显示每一个包含匹配模式的行。
示例
【例 1】假设有一份 emp.data 员工清单,现在要搜索此文件,找出职位为 CLERK 的所有员工,则执行命令如下:
[root@localhost ~]# grep CLERK emp.data
#忽略输出内容
而在此基础上,如果只想知道职位为 CLERK 的员工的人数,可以使用“-c”选项,执行命令如下:
[root@localhost ~]# grep -c CLERK emp.data
#忽略输出内容
【例 2】搜索 emp.data 文件,使用正则表达式找出以 78 开头的数据行,执行命令如下:
[root@localhost ~]# grep ^78 emp.data
#忽略输出内容
grep 命令的功能非常强大,通过利用它的不同选项以及变化万千的正则表达式,可以获取任何我们所需要的信息。
8.sed命令
我们知道,Vim 采用的是交互式文本编辑模式,你可以用键盘命令来交互性地插入、删除或替换数据中的文本。
但sed 命令不同,它采用的是流编辑模式,最明显的特点是,在 sed 处理数据之前,需要预先提供一组规则,sed 会按照此规则来编辑数据。
sed 会根据脚本命令来处理文本文件中的数据,这些命令要么从命令行中输入,要么存储在一个文本文件中,此命令执行数据的顺序如下:
- 每次仅读取一行内容;
- 根据提供的规则命令匹配并修改数据。注意,sed 默认不会直接修改源文件数据,而是会将数据复制到缓冲区中,修改也仅限于缓冲区中的数据;
- 将执行结果输出。
当一行数据匹配完成后,它会继续读取下一行数据,并重复这个过程,直到将文件中所有数据处理完毕。
语法sed [选项] [脚本命令] 文件名
sed 命令常用选项及含义
| 选项 | 含义 |
|---|---|
| -e 脚本命令 | 该选项会将其后跟的脚本命令添加到已有的命令中。 |
| -f 脚本命令文件 | 该选项会将其后文件中的脚本命令添加到已有的命令中。 |
| -n | 默认情况下,sed 会在所有的脚本指定执行完毕后,会自动输出处理后的内容,而该选项会屏蔽启动输出,需使用 print 命令来完成输出。 |
| -i | 此选项会直接修改源文件,要慎用。 |
成功使用 sed 命令的关键在于掌握各式各样的脚本命令及格式,它能帮你定制编辑文件的规则。
sed脚本命令
sed s 替换脚本命令
此命令的基本格式为:[address]s/pattern/replacement/flags
其中,address 表示指定要操作的具体行pattern 指的是需要替换的内容,replacement 指的是要替换的新内容。
sed s命令flags标记及功能
| flags 标记 | 功能 |
|---|---|
| n | 1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记; |
| g | 对数据中所有匹配到的内容进行替换,如果没有 g,则只会在第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A; |
| p | 会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。 |
| w file | 将缓冲区中的内容写到指定的 file 文件中; |
| & | 用正则表达式匹配的内容进行替换; |
| \n | 匹配第 n 个子串,该子串之前在 pattern 中用 \(\) 指定。 |
| \ | 转义(转义替换部分包含:&、\ 等)。 |
比如,可以指定 sed 用新文本替换第几处模式匹配的地方:
[root@localhost ~]# sed 's/test/trial/2' data4.txt
This is a test of the trial script.
This is the second test of the trial script.
可以看到,使用数字 2 作为标记的结果就是,sed 编辑器只替换每行中第 2 次出现的匹配模式。
如果要用新文件替换所有匹配的字符串,可以使用 g 标记
[root@localhost ~]# sed 's/test/trial/g' data4.txt
This is a trial of the trial script.
This is the second trial of the trial script.
我们知道,-n 选项会禁止 sed 输出,但 p 标记会输出修改过的行,
将二者匹配使用的效果就是只输出被替换命令修改过的行,例如:
[root@localhost ~]# cat data5.txt
This is a test line.
This is a different line.
[root@localhost ~]# sed -n 's/test/trial/p' data5.txt
This is a trial line.
w 标记会将匹配后的结果保存到指定文件中,比如:
[root@localhost ~]# sed 's/test/trial/w test.txt' data5.txt
This is a trial line.
This is a different line.
[root@localhost ~]#cat test.txt
This is a trial line.
在使用 s 脚本命令时,替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义,例如:[root@localhost ~]# sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd
sed d 替换脚本命令
``
sed 脚本命令的寻址方式
sed 脚本命令的寻址方式
9.awk命令
cat 命令可以用来显示文本文件的内容(类似于 DOS 下的 type 命令),也可以把几个文件内容附加到另一个文件中,即连接合并文件。
语法
示例
