文件内容管理
概述
主要是文件内容的增删改查等操作,也可以通过输出重定向将标准输出作为文件内容进行修改。通过输入重定向以文件内容代替标准输入。
主要操作
文件内容的查看:cat、more、less、head、tail
查找文件内容:grep
管道符:|
文件内容编辑:vi、vim
输入、输出重定向
命令详解
cat命令
cat命令详解
cat(concatenate)命令将一个或多个文件的内容输出到标准输出(屏幕上)。如果只指定了一个文件名,那么cat命令会输出该文件的全部内容。如果指定了多个文件名,cat命令会按顺序输出这些文件的内容。
命令格式
cat [选项]... [文件]...
常用选项
n
:显示行号b
:显示非空行号s
:压缩空白行E
:在每行末尾添加\\$
符号T
:将制表符\\t
显示为^I
v
:显示不可打印字符
示例
显示单个文件的内容:
cat filename
将多个文件的内容连接起来显示:
cat file1 file2 file3
将多个文件的内容连接到一个新文件中:
cat file1 file2 file3 > newfile
将多个文件的内容追加到一个已有文件的末尾:
cat file1 file2 file3 >> existingfile
将标准输入的内容重定向到一个文件中:
cat > filename
注意事项
- 如果一个文件很大,那么使用cat命令输出文件内容可能会导致屏幕滚动速度过快。在这种情况下,可以尝试使用
more
、less
、head
或tail
等命令来逐页或逐行地查看文件内容。
more命令
more命令详解
more命令可以用来逐页显示文件内容。如果一个文件很大,使用cat命令可能会导致屏幕滚动速度过快,这时可以使用more命令按页查看文件内容。
命令格式
more [选项] 文件名
常用选项
Enter
:向下滚动一行空格键
:向下滚动一页/字符串
:搜索字符串并定位到下一个匹配的字符串q
:退出more命令
示例
查看文件内容并逐页显示:
more filename
查看多个文件的内容并逐页显示:
more file1 file2 file3
注意事项
如果一个文件很大,使用more命令逐页显示文件内容时,需要等待一段时间才能看到全部内容。可以按空格键或Enter键来翻页,或者按q键退出more命令。
less命令
less命令详解
less命令用于逐页查看文件内容。和cat和more不同,它可以在文件查看过程中进行搜索、回滚、前进和退出等操作。
命令格式
less [选项] 文件名
常用选项
Enter
:向下滚动一行空格键
:向下滚动一页b
:向上滚动一页/字符串
:搜索字符串并定位到下一个匹配的字符串?字符串
:向上搜索字符串并定位到上一个匹配的字符串n
:显示下一个匹配的字符串N
:显示上一个匹配的字符串q
:退出less命令
示例
查看文件内容并逐页显示:
less filename
查看多个文件的内容并逐页显示:
less file1 file2 file3
注意事项
如果一个文件很大,使用less命令逐页显示文件内容时,需要等待一段时间才能看到全部内容。可以按空格键或Enter键向下翻页,按b键向上翻页,或者按q键退出less命令。
head命令
head命令详解
head命令用于显示文件的开头几行内容。默认情况下,head命令会显示文件的前10行内容。
命令格式
head [选项]... [文件]...
常用选项
n
:指定要显示的行数。例如,head-n 20 filename
会显示文件的前20行。
示例
显示文件的前10行:
head filename
显示文件的前20行:
head -n 20 filename
注意事项
如果文件的行数少于指定的行数,head命令会显示文件的全部内容。
tail命令
tail命令用于显示文件的末尾几行内容。默认情况下,tail命令会显示文件的后10行内容。
命令格式
tail [选项]... [文件]...
常用选项
n
:指定要显示的行数。例如,tail-n 20 filename
会显示文件的后20行。
示例
显示文件的后10行:
tail filename
显示文件的后20行:
tail -n 20 filename
注意事项
如果文件的行数少于指定的行数,tail命令会显示文件的全部内容。
grep命令
grep命令用于在文本文件中查找指定的字符串。它可以在一个或多个文件中查找,也可以在标准输入中查找。grep命令会输出包含指定字符串的行。
命令格式
grep [选项]... 字符串 [文件]...
常用选项
i
:忽略大小写v
:反向查找(查找不包含指定字符串的行)n
:显示行号A
:显示匹配行及其后面的若干行B
:显示匹配行及其前面的若干行E
:使用正则表达式进行匹配
示例
在文件中查找指定字符串:
grep 字符串 文件名
在多个文件中查找指定字符串:
grep 字符串 文件1 文件2 文件3
查找包含指定字符串的行及其后面的两行:
grep -A 2 字符串 文件名
查找包含指定字符串的行及其前面的两行:
grep -B 2 字符串 文件名
注意事项
- 如果要在多个文件中查找指定字符串,可以使用通配符进行文件名匹配。例如,
grep 字符串 *.txt
会在所有扩展名为txt的文件中查找。 - 如果要在标准输入中查找指定字符串,可以使用输入重定向。例如,
grep 字符串 < 文件名
会从文件中读取内容,并在其中查找指定字符串。 - 如果要在文件名中包含空格或其他特殊字符,需要将文件名用引号括起来。例如,
grep 字符串 "file name"
会在名为"file name"的文件中查找。 grep
与管道结合起来可以查询任何内容,例如:ps -ef | grep weblogic
管道符I
管道是Linux中非常有用的概念。管道允许将一个命令的输出作为另一个命令的输入。使用管道可以将多个命令串起来,以实现更复杂的操作。
管道符|
用于将一个命令的输出传递给另一个命令。
管道是文件管理里比较重要的内容
管道的左边和右边都有命令
管道左边的命令会产生输出结果,输出结果经过了管道之后就变成右边命令的输入
管道右边的命令,总是接收输入的命令
示例
查找包含指定字符串的进程,下面的命令将ps的输出传递给grep,用于查找包含指定字符串的进程:
ps aux | grep 进程名
查找文件中包含指定字符串的行,下面的命令将cat的输出传递给grep,用于查找文件中包含指定字符串的行:
cat 文件名 | grep 字符串
查找文件中包含指定字符串的行并计算行数,下面的命令将cat的输出传递给grep,用于查找文件中包含指定字符串的行,并将结果传递给wc,用于计算行数:
cat 文件名 | grep 字符串 | wc -l
查找文件中包含指定字符串的行并输出行号,下面的命令将cat的输出传递给grep,用于查找文件中包含指定字符串的行,并将结果传递给grep,用于输出行号:
cat 文件名 | grep -n 字符串
注意事项
- 管道符可以将任意数量的命令串起来,但是要注意命令的顺序,以确保每个命令都能够正确处理前一个命令的输出。
- 管道符可以将命令的输出传递给另一个命令,但是如果输出过多,可能会导致性能问题或者内存不足。在处理大量数据时,可以考虑使用其他工具或编程语言来处理数据。
通配符
通配符是用于在Linux中匹配文件名的特殊字符。下面是一些常用的通配符:
?
:表示一个非空的空白字符\\
:表示转义字符,能够失去特殊字符的功能[abc]
:表示abc
中的任意一个字符[^abc]
:表示不是abc
中的任一字符的字符*
:表示任意数量的字符[a-z]
:表示所有小写字母[A-Z]
:表示所有大写字母[a-Z]
:表示所有字母[0-9]
:表示所有数字
通配符适用于所有文件管理命令,包括ls
、touch
等。下面是一些示例:
ls ??
:列出所有两个字符的文件touch abc?
:如果abc?
匹配不到文件,则创建一个文件名为abc?
的文件。如果abc?
能匹配到文件,则更新匹配到的文件的时间。touch a\\?
:创建一个文件名为a?
的文件touch 'a?'
:生成一个a?
的文件ls a[abc]c
:列出aac
、abc
、acc
三个文件ls [ab][ab][ab]
:显示每一位上都是a
或b
的、三个字符长度文件名的文件
输出重定向
当执行一个命令后,命令产生了结果,结果默认是输出到屏幕上的。默认情况,无论一个命令执行正确与否,结果都会默认输出到屏幕上。在有些情况下,我可能需要保留命令或者脚本输出的结果。当做log,用作后面分析。
输出重定向是将命令的输出结果保存到文件或设备中的操作。在Linux中,可以使用以下符号进行输出重定向:
>
:将命令的输出结果保存到文件中。如果文件不存在,则创建一个新的文件;如果文件已经存在,则覆盖原来的文件内容。>>
:将命令的输出结果追加到文件中。如果文件不存在,则创建一个新的文件;如果文件已经存在,则在文件末尾追加新的内容。2>
:将命令的错误输出重定向到文件中。例如,sh start.sh 2> error.log
会将ls
命令的错误输出保存到error.log
文件中。2>>
:将命令的错误输出追加到文件中。&>
:将命令的标准输出和错误输出都重定向到文件中。例如,ls no_such_file &> output.log
会将ls
命令的标准输出和错误输出都保存到output.log
文件中。
示例
将命令的输出结果保存到文件中:
ls > file.txt
将命令的输出结果追加到文件中:
ls >> file.txt
将命令的错误输出重定向到文件中:
ls no_such_file 2> error.log
将命令的错误输出追加到文件中:
ls no_such_file 2>> error.log
将命令的标准输出和错误输出都重定向到文件中:
ls no_such_file &> output.log
注意事项
- 输出重定向符号可以与管道符一起使用。例如,
ls | grep keyword > file.txt
会将ls
命令的输出结果传递给grep
命令,然后将grep
命令的输出结果保存到file.txt
文件中。 - &>>/dev/null : /dev/null是一个特殊的文件,如果将重定向指向这个文件,那么就相当于将执行结果送到黑洞中。有些时候,我们不想让这个命令的输出显示到任何地方,就送到黑洞中。
输入重定向
输入重定向是将文件中的内容作为命令的输入数据的操作。在Linux中,可以使用以下符号进行输入重定向:
<
:将文件中的内容作为命令的输入数据。例如,sort < file.txt
会将file.txt
文件中的内容作为sort
命令的输入数据。<<
:将命令的输入数据指定为文本块。例如,cat << EOF
会将下一个文本块作为cat
命令的输入数据,直到遇到以EOF
开头的行为止。
示例
将文件中的内容作为命令的输入数据:
sort < file.txt
将命令的输入数据指定为文本块:
cat << EOF
This is a text block.
It will be used as input to the 'cat' command.
EOF
注意事项
- 输入重定向符号可以与管道符一起使用。例如,
grep keyword < file.txt | wc -l
会将file.txt
文件中的内容作为grep
命令的输入数据,然后将grep
命令的输出结果传递给wc
命令。
输入重定向的意义
可以将交互式的命令变为非交互式
shell脚本其实就是Linux命令的集合体,一个脚本里面可以有N个Linux命令,但是shell脚本里面要尽可能的是非交互式命令,这样才能让脚本“自己动”