head
我想仅使用命令和来显示文件中的第 3 行和第 7 行tail
(我不想显示第 3 行和第 7 行之间的行)。
答案1
在 shell 中使用 MULTIOS 工具zsh
:
$ head -n 7 file | tail -n 5 > >( head -n 1 ) > >( tail -n 1 )
line 3
line 7
也就是说,使用 提取第 3 行到第 7 行head -n 7 file | tail -n 5
,然后获取其中的第一行和最后一行。
在 中bash
,这相当于
$ head -n 7 file | tail -n 5 | tee >( head -n 1 ) | tail -n 1
line 3
line 7
它还用于tee
复制数据。
答案2
head -n3 input | tail -n1; head -n7 input | tail -n1
使用head
获取前三行,然后tail
仅获取最后 1 行。然后使用head
获取前七行,tail
仅获取最后 1 行。
请注意,实际上是两个由 分隔的命令;
,它可能在单个命令中,但我不确定如何。
使用sed
可能会更好:
sed -n '3p;7p' input
如果需要是单个命令,请创建自己的命令(函数):
get_lines () {
local input=$1
shift
for line; do
head -n "$line" "$input" | tail -n 1
done
}
你可以这样称呼它:
$ get_lines input 3 7
This is line 3
This is line 7
input
你的文件名在哪里。这也将接受您想要的任意数量的行号:
$ get_lines input 1 3 5 7 9
This is line 1
This is line 3
This is line 5
This is line 7
This is line 9