从流的头部和尾部删除指定数量的行

时间:2015-11-06 20:43:13

标签: bash

k=$1
m=$2
fileName=$3 
head -n -$k "$fileName" | tail -n +$m

我有bash代码。 当我执行它时,它只删除少于它应删除的内容。像./strip.sh 4 5 hi.txt > bye.txt那样应该删除前4行和最后5行,但它只删除前4行和最后4行。此外,当我执行./strip.sh 1 1 hi.txt > bye.txt时,它只删除最后一行,而不是第一行....

1 个答案:

答案 0 :(得分:2)

#!/bin/sh
tail -n +"$(( $1 + 1 ))" <"$3" | head -n -"$2"

测试如下:

set -- 4 5 /dev/stdin # assign $1, $2 and $3
printf '%s\n' {1..20} | tail -n +"$(( $1 + 1 ))" <"$3" | head -n -"$2"

...正确打印5到15之间的数字,从正面修剪前4个,从背面修剪5个。同样地,使用set -- 3 6 /dev/stdin,打印4到14之间的数字,这同样是正确的。