最近的工作中需要在shell中用命令对一个文本的内容进行处理,前提是忽略文本的第一行,只处理其他行。思考之下发现tail、awk和sed这三个命令均可以实现这一功能,故在此做下记录。
- 使用tail命令
- 使用sed命令
- 使用awk命令
下面就来具体说明下如何使用上述三个命令进行操作。
-
使用tail命令的
-n
参数tail命令的
-n
参数用来显示文本的最后k行,例如,要显示最后5行,可以使用seq 1 10|tail -n 5
输出为:
6
7
8
9
10在-n的参数值前加上
+
,用来显示从第k行到最后一行的内容seq 1 10|tail -n +5
输出为:
5
6
7
8
9
10所以,要只显示除过第一行的其他所有行,可以指定参数
-n +2
,如下所示:head -n +2 your_file
-
使用awk命令的内置变量NR或者FNR
在awk命令中,内部变量
NR
用来表示文件中已处理的输入记录数,内部变量FNR
用来表示当前文件中已处理的记录数。
当要处理的文件只有一个时,FNR和NR的作用相同。所以,要只显示除过第一行的其他所有行,可以指定
NR!=1
或者FNR!=1
即可,如下所示:awk 'NR!=1 { print }' your_file
或者
awk 'FNR!=1 { print }' your_file
-
使用sed的-n参数和p替换标记或者使用删除命令
3.1 使用
-n
参数和p
标记sed命令的
-n
参数的作用是使sed命令不产生输出。sed的替换命令中
p
标记的作用是打印与替换命令中指定的模式匹配的行。-n
参数和p
标记结合使用,就可以打印出与指定模式匹配的行。所以,要只显示除过第一行的其他所有行,只需要打印从第二行到最后一行即可,行区间可以用
2,$
表示,
其中$
表示最后一行。sed -n '2,$p' your_file
也可以直接指定不需要打印的行,使用
1!p
表示,如下所示:sed -n '1!p' your_file
3.2 使用删除命令
d
sed的删除命令
d
,通过指定行区间,用来删除文本流中的特定行。所以,只要从文本内容中删除第一行而打印出其他行即可即可,如下所示:
sed '1d' your_file