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
时,它只删除最后一行,而不是第一行....
答案 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之间的数字,这同样是正确的。