例如
文件a.txt
具有以下上下文
aaa
bbb
ccc
ddd
eee
可以实现此目标的脚本是什么,例如
script.sh a.txt 2 4
输出:
bbb
ccc
ddd
其中 2 和 4 是指定的行号。
You can use awk
for this:
awk 'NR>=2 && NR<=4' file
In general,
awk -v beginning=$first -v end=$last 'NR>=beginning && NR<=end' $file
so it is a matter of reading $file
, $first
and $last
in your script.
Based on doubleDown comment (thanks!), it can also be done like this:
awk 'NR==2, NR==4' file
and more general:
awk -v beginning=$first -v end=$last 'NR==beginning, NR==end' $file
sed
是一个可以很好地处理这个问题的原始工具:
sed -n '2,4p' file # method 1
sed '2,4!d' file # method 2
见sed1line.txt;单线的一个很好的资源sed
。
最简洁的方法是使用sed
:
$ sed '2,4!d' file
bbb
ccc
ddd
如前所述,最好的选择是使用 awk 或 sed。如果你喜欢只使用传统的工具,你可以做这样的把戏(其中 $FILE 是 a.txt):
#!/bin/env bash
FILE=a.txt
SIZE=`wc -l $FILE`
let STARTPOS=$SIZE-$1
let OFFSET=$2-$1
cat $FILE | tail -n $STARTPOS | head -n $OFFSET