1、查看文件内容
(1-1)查看文件内容:cat,tac,head,tail
查看文件内容 | cat 文件名 |
---|---|
查看文件内容并显示行号 | cat -n 文件名 |
倒着查看文件内容(从最后一行开始) | tac 文件名 |
查看文件前10行内容 | head 文件名 |
查看文件前num行内容 | head -n num 文件名 |
查看文件最后10行内容 | tail 文件名 |
查看文件最后num行内容 | tail -n num 文件名 |
(1-2)查看文件内容并显示行号:cat,nl
cat -n 默认空行也有行号。nl 默认空行没有行号。
查看文件内容,显示行号(空行也有行号) | cat -n 文件名 | nl -b a 文件名 |
---|---|---|
查看文件内容,显示行号(空行没有行号) | cat -b 文件名 | nl 文件名 |
查看文件内容,显示行号(行号等宽):nl -b a -n rz 文件名
查看文件内容,显示行号(行号指定宽度):nl -b a -n rz -w 指定宽度 文件名
注:空行也显示行号。若空行不显示行号,则去掉 -b a 即可。
(1-3)翻页查看文件内容:more,less
more:
- 只能向下翻页。向下一行(Enter键),向下一页(空格键)。
- 退出:(快捷键)Ctrl + C 或者 q
more命令的常用选项 | 说明 |
---|---|
-num | 一次显示num行 |
+num | 从第num行开始显示 |
less:
- 向上翻页:向上一行(向上键),向上半页(Shift+PgUp 或者 u),向上一页(PgUp 或者 b)。
- 向下翻页:向下一行(Enter键 或者 向下键),向下半页(Shift+PgDn 或者d),向下一页(PgDn 或者 空格键)。
- 退出:q
less命令的常用选项 | 说明 |
---|---|
-N | 显示行号 |
-m | 显示百分比 |
-e | 文件结束,自动离开 |
(1-4)监视文件末尾内容变动:tail
当文件末尾在不断追加内容,若想要监视文件末尾内容的变动并实时显示变动内容,则可以使用tail -f 。
监视文件末尾内容变动:tail -f 文件名
停止监视(快捷键):Ctrl + C
2、统计、排序、去重
(2-1)统计:wc(word count)
统计文件内容信息(行数 单词数 字节数) | wc 文件名 |
---|---|
统计文件内容有多少行(lines) | wc -l 文件名 |
统计文件内容有多少单词数(字符串words) | wc -w 文件名 |
统计文件内容有多少字节数(字符chars) | wc -c 文件名 |
(2-2)排序:sort
默认第一列字符根据ASCII码的次序排序。
sort命令的常用选项 | 说明 |
---|---|
-c | 判断是否已排过序 |
-r | 倒着排序 |
-f | 忽略大小写 |
-n | 按数字大小排序 |
-t | 指定分隔符(默认空格分隔),一般与-k一起用。 |
-k | 指定需要排序的列。分隔符不是空格时,与-t一起用。 |
-o | 将排序后的内容输出到指定文件 |
-u | 去重 |
(2-3)去重:uniq
去重(整行相同且连续才去重) | uniq 文件名 |
---|---|
去重,并统计重复次数 | uniq -c 文件名 |
注意:uniq只能去重连续的相同行数据,若非连续,则不会去重。可先排序再去重。
管道符:"|"。前面命令的结果给后面的命令使用。
3、过滤文件内容
(3-1)grep:按行过滤
grep命令的常用选项 | 说明(默认模糊匹配) |
---|---|
-w | 精确匹配 |
-n | 显示行号 |
-i | 忽略大小写 |
-c | 统计行数 |
-v | 取反 |
-o | 只显示匹配结果 |
-An | 匹配结果中也显示最后一条的下面n行 |
-Bn | 匹配结果中也显示第一条的上面n行 |
-Cn | 匹配结果中也显示第一条的上面n行和最后一条的下面n行 |
-E | 正则表达式(普通) |
-P | 正则表达式(Perl) |
-r | 从目录中递归过滤所有指定文件中匹配的行 |
(3-2)sed:按行过滤,可删除或替换
sed命令的常用选项 | 说明 |
---|---|
-n | 只显示结果 |
-i | 修改原文件 |
sed命令涉及的动作 | 字符 | 格式 | 备注 |
---|---|---|---|
打印 | p | '/匹配的内容/p' | |
打印整行 | p | '起始行号,结束行号p' | |
删除匹配内容所在的行 | d | '/匹配的内容/d' | |
删除整行 | d | '行号d' | $为最后一行 |
删除多行 | d | '起始行号,结束行号d' | |
替换 | s | 's/旧值/新值/' | 's/旧值/新值/gI' 。 g表示全局替换, I(大写字母I)表示忽略大小写 |
整行替换 | c | '起始行号,结束行号c 新内容' | |
当前下方插入一行 | a | '行号a 插入的内容' | 若多行,行末用"\" |
当前上方插入一行 | i | '行号i 插入的内容' | 若多行,行末用"\" |
对查找的内容再执行命令操作 | {...} | '/匹配的内容/{再执行的命令操作}' |
注意:p 打印,默认输出所有内容,若只输出匹配到的行数据,使用-n。
d 删除、s 替换、c 整行替换、a 后面增行、i 前面增行,默认不修改原文件。若修改原文件,使用-i。
修改原文件需慎重,最好先备份一份。可以使用输出重定向,输出到指定文件中。
(3-3)awk:按列过滤
- 查看某列:awk '{print $列号}' 文件名
- 查看多列:awk '{print $列号1, $列号2}' 文件名
- 查看某行:awk 'NR==行号' 文件名
- 查看多行:(举例)awk 'NR>=行号1 && NR<=行号2' 文件名
- 查看含指定内容的行:awk '/匹配的内容/' 文件名
- 嵌套过滤:(举例)awk 'NR==行号/匹配的内容/{print $列号}' 文件名
注意:默认以空格为分隔符。可用"-F"指定分隔符。
过滤多列时,若多列之间有","则默认多列之间输出空格,可指定其他输出分割符。
- 可使用OFS内置变量指定输出分隔符,例如:OFS=' * ',即awk '{print $列号1, $列号2}' OFS=' * ' 文件名。
- 也可不使用","而用双引号指定输出分隔,例如:" * ",即awk '{print $列号1" * "$列号2}' 文件名。
4、输入输出重定向
一般从键盘输入,输出到显示屏。
- 输出重定向:输出到文件中。符号:">"(从文件开头写入),">>"(追加到文件末尾)。
- 输入重定向:从文件获取输入。符号:"<"(从文件读取),"<<"(重定向到交互式shell脚本或程序)。
(4-1)输出重定向
注意:0:标准输入(STDIN),1:标准输出(STDOUT),2:标准错误输出(STDERR)。
1>之间不能有空格,2>之间也不能有空格。
直接输出重定向到文件,则可以清空文件内容。
(4-2)输入重定向
输入重定向获取的数据,可以输出重定向到指定文件中。
5、编辑文件内容:vi
注意:若屏幕最下方左侧显示"--INSERT--",则表示处于输入模式(也称编辑模式),可编辑文件内容。
若想要使用快捷键或命令行操作,则按ESC键退出输入模式,回到命令模式下操作。
命令行操作即输入 ":命令" ,按回车执行命令。输入的命令将显示在屏幕最下方左侧。
(1)先用vi打开文件:vi 文件名
若文件不存在,则创建新文件。打开文件后,则进入命令模式。命令模式下,不能输入内容,可以使用快捷键或命令行操作。
# vi打开文件时,光标可直接跳到指定行首
vi 文件名 +行号
命令模式下,常用快捷键或命令行操作:
u | 复原前一个动作(即撤销) |
---|---|
Ctrl + r | 重做上一个动作(即恢复) |
:set nu | 显示行号(:set number) |
:set nonu | 取消行号 |
常用快捷键或命令行操作 | 说明 |
---|---|
左下上右键 或者 hjkl | 左下上右移动光标 |
Ctrl + f | 下翻一页 |
Ctrl + d | 下翻半页 |
Ctrl + b | 上翻一页 |
Ctrl + u | 上翻半页 |
gg | 跳转到文件开头(第一行) |
G | 跳转到文件末尾(最后一行) |
8gg 或者 8G 或者 :5 | 跳转到第8行 |
0 | 跳转到行首 |
^ | 跳转到行首第一个字符(跳过行首的空格) |
$ | 跳转到行尾 |
常用快捷键或命令行操作 | 说明 |
---|---|
dd | 剪切/删除当前行 |
ndd | 删除当前行及下方共n行 |
d1G | 删除当前行到第一行所有数据 |
dG | 删除当前行到最后一行所有数据 |
d0(数字0) | 删除当前字符到行首的数据 |
d$ | 删除当前字符到行末的数据 |
dw | 删除一个单词 |
x | 删除一个字符 |
nx | 删除n个字符 |
yy | 复制当前行 |
nyy | 复制当前行及下方共n行 |
y1G | 复制当前行到第一行所有数据 |
yG | 复制当前行到最后一行所有数据 |
y0(数字0) | 复制当前字符到行首的数据 |
y$ | 复制当前字符到行末的数据 |
p(小写字母) | 粘贴到当前行的下方 |
P(大写字母) | 粘贴到当前行的上方 |
常用快捷键或命令行操作 | 说明 |
---|---|
/查找的内容 | 查找(从光标开始往下查找) |
?查找的内容 | 查找(从光标开始往上查找) |
n | 查找到一个,按n继续往上/下查找下一个 |
N | 查找到一个,按N反方向往上/下查找下一个 |
:起始行号,结束行号s/旧值/新值/gc | 在某区域替换内容。1,$ 或者% 即第一行到最后一行。 c 显示提示信息供用户确认。 |
(2)进入输入模式
处于命令模式下,可按 i / a / o 进入输入模式,开始编辑文件内容。
i | 在光标所在位置,开始输入 |
---|---|
a | 光标向后移动一位,开始输入 |
o | 光标下方新插入一行,从新行开始输入 |
编辑过程中,可以按ESC键退出输入模式,回到命令模式。命令模式下,可使用快捷键或命令行操作。
(3)编辑完,退出
先按ESC键退出输入模式,回到命令模式下。再输入":命令",按回车执行命令。
常用命令 | 说明 |
---|---|
:w | 保存文件 |
:q | 退出 |
:wq | 保存,并退出 |
:q! | 不保存,并退出 |
注意:若vi打开文件编辑时,突然中断退出,则重新vi打开,都会提示如下:
原因:因为vi打开文件时会生成相对应的临时隐藏文件".文件名.swp",突然中断,临时文件还在,再次vi打开就会提示已经有这个临时文件了。
解决办法:第一步:恢复正在编辑时突然中断的文件:vi -r 文件名
第二步:删除vi生成的临时隐藏文件".文件名.swp"。
后话:Linux内置的文本编辑器 vi 功能已经很强大。而vim是从vi发展出来的,被广泛使用,可以不同颜色加亮代码。若要使用vim,需安装。
补充:管道符
管道符:"|"。前面命令的标准输出会作为后面命令的标准输入。简单的说,就是前面命令的结果给后面的命令使用。