Linux获取文本部分内容
- 前言
- 场景
- 获取前几行内容
- 获取末尾几行内容
- 获取中间内容
- head 命令 + tail 命令 结合
- sed 命令
- awk 命令
前言
test.log 文本内容如下:
(注意:内容 a1004
和a1005
之间有一空行)
[root@gaussdb002 tmp]# cat test.log
a1001
a1002
a1003
a1004
a1005
a1006
a1007
a1008
[root@gaussdb002 tmp]#
场景
获取前几行内容
head 命令
语法: head -n <行数> 文件名
-n <行数>
:指定要显示的行数。如果不指定 -n 参数,默认输出前 10 行。
例如:获取前 3行 数据。
[root@gaussdb002 tmp]# head -n 3 test.log
a1001
a1002
a1003
[root@gaussdb002 tmp]#
获取末尾几行内容
tail 命令
语法: tail -n <行数> 文件名
-n <行数>
:指定从文件末尾显示的行数。如果不指定 -n 参数,默认输出最后 10 行。
例如:获取末尾 3行 数据。
[root@gaussdb002 tmp]# tail -n 3 test.log
a1006
a1007
a1008
[root@gaussdb002 tmp]#
获取中间内容
-
使用
vim
编辑文件,打开行号(输入:set number
)
-
实现:获取 第3行 ~ 第6行 之间的数据。
实现此需求方式有以下几种:
head 命令 + tail 命令 结合
[root@gaussdb002 tmp]# head -n 6 test.log | tail -n +3
a1003
a1004
a1005
[root@gaussdb002 tmp]#
若内容较多,可将内容重新输出到 文件中:
[root@gaussdb002 tmp]# head -n 6 test.log | tail -n +3 > temp.log
[root@gaussdb002 tmp]# cat temp.log
a1003
a1004
a1005
[root@gaussdb002 tmp]#
sed 命令
sed 命令
语法: sed -n '<起始行>,<结束行>p' 文件名
-n
:禁止自动打印输出,只输出匹配的行。
<起始行>,<结束行>p
:表示从 <起始行> 到 <结束行> 之间的行进行打印,p 是 print 的缩写。
[root@gaussdb002 tmp]# sed -n '3,6p' test.log
a1003
a1004
a1005
[root@gaussdb002 tmp]#
awk 命令
awk 命令
语法: awk '条件 {动作}' 文件名
NR
:表示当前处理的行号。
条件
:定义在什么条件下执行 {动作},例如 NR>=3 && NR<=5。
{动作}
:在满足条件时执行的操作,默认是打印匹配行。
[root@gaussdb002 tmp]# awk 'NR>=3 && NR<=6' test.log
a1003
a1004
a1005
[root@gaussdb002 tmp]#