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