目录
引言
文件内容查看与编辑
1. echo 指令
2. 输出重定向:>
3. 追加重定向:>>
4. 输入重定向:<
5. cat 指令
6. nano 指令
7. more 指令
8. less 指令
9. head 指令
10. tail 指令
11. 管道:|
12. wc 指令
13. grep 指令
总结
当你迈出Linux初学者的第一步,已经掌握了基本的操作指令,如 ls、cd、cp 等,你或许迫不及待地想要深入了解更多关于文件系统的内容。在这篇博客中,我们将进入文件内容查看与编辑的领域,这是Linux日常操作中至关重要的一部分。从 cat 到 nano,我们将会探索这些指令的妙用,帮助你更好地理解和操作Linux系统。让我们一同探险,发现文件的奇妙世界吧!
语法:echo [选项] [字符串或变量]
功能:echo 是一个用于在终端输出文本或变量的命令。它通常用于打印简单的文本消息、变量值或者将文本写入文件。
常用选项:
-n:不输出末尾的换行符,使输出在同一行。
-e:启用转义字符的解释,可以使用转义字符表示特殊字符。
-E:禁用转义字符的解释,即不解释转义字符。
\\:在输出中显示反斜杠。
\a:发出警告声音。
\b:后退一格。
\c:不输出换行符。
\n:换行。
\t:水平制表符(Tab)。
\r:回车。
\":双引号。
\':单引号。
举例:
这里就把"hello world"打印到了屏幕上了,这里加不加双引号都是可以的。在Linux中,遵循这样一个理念:一切皆文件。这样Linux就能够以统一的方式来进行文件或设备的访问。我们可以把显示器(终端)也看做是一个显示器文件,因此这里就是把"hello world"写入到显示器(终端)这个文件上。
语法:command > file
功能:输出重定向是一种将命令的标准输出(stdout)定向到文件或设备的方法。它允许你将命令的输出保存到文件中,而不是在终端上显示。
> :将命令的标准输出覆盖写入到文件中。如果文件不存在,则创建文件;如果文件存在,则覆盖文件内容。
举例:
这里我们可以看见"hello world"并没有打印在我们的终端,并且我们查看到了当前目录多了一个 test.txt 文件,我们用 cat 指令查看一下这个文件的内容(cat指令在下面会讲,这里先知道它用来查看文件内容就可以了),这里看到"hello world"被打印了出来,原来"hello world"被写入到了这个文件中,这就是输出重定向 > 的作用,顾名思义就是改变输出,本来"hello world"应该被输出到显示器文件的,然后我们把它重定向到了 test.txt 文件中。那么是不是这个文件必须存在呢,我们来试验一下。
这里我们原本没有 a.txt 这个文件,重定向后自动帮我们生成了,所以每次输出重定向,它都会先创建一个文件。
这里我们 echo 指令后面并没有跟字符串,而是直接重定向到了一个文件中,发现也是生成了这个文件,只不过文件里面没有内容,所以进行输出重定向的时候,如果没有要输出的内容,它只是创建了一个文件,有内容的话则会写入。
现在我们直接输出重定向就能创建一个空文件了。那如果进行输出重定向的时候已经存在了这个文件,并且里面是有内容的,又会怎么样呢,我们来试验一下。
原本我们的文件是有内容的,我们输出重定向后发现原本的内容被清空了,这是因为每次输出重定向的时候,如果这个文件是存在的,它上来二话不说就给你把文件清空了,接着才进行文件内容的写入,因此在使用输出重定向的时候要特别小心。
语法:command >> file
功能:追加重定向是一种将命令的标准输出(stdout)追加写入到文件中的方法。与普通重定向不同,追加重定向不会覆盖文件内容,而是在文件末尾追加新的输出。
>> :将命令的标准输出追加写入到文件中。如果文件不存在,则创建文件;如果文件存在,则在文件末尾追加内容。
举例:
使用追加重定向允许我们在末尾进行内容写入,这样就不会清空原本的文件内容了。
用追加重定向来创建一个空文件也是允许的。
语法:command < file
功能:输入重定向是一种用于改变命令从标准输入读取数据的方式。通过输入重定向,可以将文件中的内容作为命令的输入,而不是手动键入。这对于需要处理大量数据或执行自动化任务的情况非常有用。
举例:
cat 命令通过输入重定向,将 test.txt 文件中的内容显示在终端上,而不是等待用户手动输入。这提供了一种有效处理文件数据的方式。
语法:cat [选项][文件]
功能:查看目标文件的内容
常用选项:
-b 对非空输出行编号
-n 对输出的所有行编号
-s 不输出多行空行
举例:
cat 指令在前面已经涉及过了,事实上它确实非常简单,功能也很单一,就是查看文件的内容。这里我们注意到这个例子中 cat 并没有跟输入重定向,但它也能显示出文件的内容。确实,这两者都可以用于查看文件的内容,但它们之间有一些微妙的区别:
cat test.txt:
cat 命令接收文件名作为参数,它会打开文件并将其内容直接输出到终端。 这种方式是直接读取文件的内容,而不涉及输入重定向。
cat < test.txt:
< 是输入重定向符号,它将文件 test.txt 中的内容重定向到命令的标准输入。 这种方式是通过标准输入接收来自文件的内容。当使用输入重定向时,可以将文件内容发送到命令的标准输入,而不是通过键盘输入。
在实际使用中,两者的效果是相同的,都能够显示文件的内容。然而,使用输入重定向的方式,命令不直接操作文件,而是通过标准输入接收内容。
当使用 cat 命令时,如果没有指定文件名作为参数,它将等待用户从键盘输入内容,并将输入的内容输出到终端。当我们想退出时,只需要按 crtl + c 即可。
将 cat 指令倒过来,就能让文件的内容也倒过来输出啦。
语法:nano [选项] 文件名
功能:nano 是一个文本编辑器,旨在提供简单且用户友好的界面,适用于终端环境。通过 nano,用户可以创建、编辑文本文件。
举例:
这里我们写上一段简单的程序,然后按下 ctrl + x,再按 y 确认,然后按回车就退出来,这时候我们就编辑成功了。
cat 一下,的确写入了我们的代码。
我们用 gcc 编译一下。-o 后面接文件名可以指定生成的可执行文件的名称。
GCC (GNU Compiler Collection) 就是一组能够将我们写的程序翻译成计算机可以理解的语言的工具集。它支持多种编程语言,比如C、C++等。就像翻译它的名字一样,它是一个开源的、由GNU项目维护的编译器系列。无论是写操作系统还是应用软件,使用GCC能够帮助程序员把他们的代码转化为计算机能够执行的指令,使得我们的程序能够在各种计算机上运行。
这里我们可以使用相对路径或者绝对路径来打开这个可执行程序。特别要注意的是,如果我们处于当前路径下,需要使用 ./文件名 的方式来打开可执行程序。这确保了系统知道我们在当前路径中查找可执行文件。在成功执行后,我们得到了"hello linux"的输出。
语法:more 文件
功能:more命令,功能类似 cat,适合用来查看大文件
举例:
这个big.txt 是一个内容较多的文件,如果使用 cat 命令查看不太方便。相比之下,我们可以使用一个 more 命令来更有效地查看文件内容。它会逐屏显示文件内容,通过按下空格键或回车键可以逐屏向下翻阅,其中回车键每次向下翻动一行,而空格键每次更新一整屏。然而,如果需要回头查看文件上方的内容,我们则需要通过鼠标滚轮向上移动,这可能会稍显繁琐。当我们不想查看了,只需要按下 q 就可以退出。更推荐使用接下来要介绍的 less 指令来查看大文本。
语法:less [参数] 文件
功能:less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。除此之外,在 less 里头可以拥有更多的搜索功能,不止可以向下搜,也可以向上搜。
选项:
-i 忽略搜索时的大小写
-N 显示每行的行号
/字符串:向下搜索“字符串”
?字符串:向上搜索“字符串”
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
q:quit
举例:
使用 less 查看大型文本文件时,可以灵活运用键盘上的上箭头键和下箭头键进行自由浏览。同时,空格键和回车键仍然可以用于逐页翻动文件内容。如果想要退出查看,只需按下键盘上的 q 键即可。这种交互方式使得使用 less 更加直观和便捷,让使用者能够更灵活地阅读和浏览大文本文件的内容。
当输入200并回车时,将会向下滚动文本并显示接下来的200行内容,这是 less 的一个很有用的功能,可以快速导航到文件的特定部分,而不必逐行滚动。
当我们输入 /要查找的内容 时,less 会启动查找功能,向下查找文本中包含指定内容的位置。一旦找到匹配的内容,less 会跳转到该内容所在的行,并且高亮显示查找的关键字。这提供了一种快速定位和浏览文本文件中特定信息的便捷方式。
当我们想回过头来查找 200 时,只需要输入 ?200,就可以向上查找200这个内容了。
如果我们用的是 / 来查找,此时按下回车键后,我们发现它查找的是 "1000" 而不是我们期望的 "100"。这是因为此时 less 是向下查找的。我们只需按下大写字母 N 键,它会反向重复前一个搜索,即从向下查找变成了向上查找。同理,如果输入小写字母 n 键,则会继续向下查找。
语法:head [参数][文件]
功能:head 用来显示档案的开头至标准输出中,默认head命令打印其相应文件的开头10行。
选项:
-n<行数> 显示的行数
举例:
这样就打印了文件的前十行。
通过指定行数来打印内容。
tail 命令从指定点开始将文件写到标准输出。使用tail命令的 -f 选项可以方便的查阅正在改变的日志文件,tail -f filename会把 filename 里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容。
语法:tail[必要参数][选择参数][文件]
功能:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。
选项:
f 循环读取
-n<行数> 显示行数
举例:
通过 -n 选项查看文件的最后20行,不指定行数时默认是最后十行。
语法:command1 | command2
其中,command1 和 command2 是两个独立的命令,| 表示将 command1 的输出作为 command2 的输入。
功能:
连接命令: 管道用于连接两个或多个命令,使一个命令的输出成为另一个命令的输入。
实现流式处理: 管道允许数据在命令之间流动,实现流式处理。输出流从一个命令传递到另一个命令,以便进行复杂的数据处理。
并行执行: 管道允许多个命令并行执行,每个命令都在其自己的进程中运行。这提高了系统资源利用率。
过滤和转换数据: 管道是一个强大的工具,可以用于过滤和转换数据。例如,可以使用 grep 过滤文本,然后使用 awk 对结果进行转换。
举例:
"echo" 命令原本会在终端打印 "hello world",但添加了管道后,将输出传递给了下一个命令 cat 。最终通过 "cat" 将内容显示在了终端上。这个场景有点脱裤子放屁,但只是为了更好地理解管道的作用而举得例子。接下来举一个实用的例子,假如我们要查找某个文件的第8000到8010行,应该怎么办呢?我们前面学习了 head 指令和 tail 指令,这时候使用管道来级联它们就行了。
首先,通过使用 head 命令,我们将文件的前 8010 行内容传递到管道中。接着,我们利用管道将这些内容作为 tail 命令的输入,同时指定要显示的行数为最后的 11 行。这样,我们成功地查看了文件的第 8000 行到第 8010 行的内容。所以我们可以通过管道级联多条命令来达到我们想要的效果。
还可以这样玩,让它倒过来打印
语法:wc [选项] 文件名
功能:wc 是一个用于统计文件中字节数、字数、行数的命令。
选项:
-l 选项:显示行数。
-w 选项:显示字数。
-c 选项:显示字节数。
如果没有使用任何选项,则默认显示行数、字数和字节数。
举例:
这样就统计了文件的行数。
语法: grep [选项] 搜寻字符串 文件
功能: 在文件中搜索字符串,将找到的行打印出来
常用选项:
-i :忽略大小写的不同,大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行
举例:
这里在 test.txt 中查找含有 big 字符串的行,并将改行打印出来,而且要搜索的字符串会高亮显示。
带上 -n 选项可以顺便打印行号。
再带上 -v 选项就会匹配不带有字符串 big 的行,并打印。
在这篇博客中,我们深入研究了Linux命令行环境下文件内容查看与编辑的关键工具。我们介绍了cat、nano、more 和 less 等查看工具,以及 echo、输出/追加/输入重定向、head、tail、管道、wc和grep等编辑和处理文件内容的命令。通过学习这些工具和技巧,读者将能够更灵活、高效地在命令行环境中管理文件,实现文本数据的查看、编辑和处理。