在Bash中省略文件开头或结尾的行

时间:2014-01-08 02:50:01

标签: bash sed awk head tail

给定文本文件a.txt,如何从文件中剪切头部或尾部?

例如,删除前10行或后10行。

5 个答案:

答案 0 :(得分:2)

要省略文件开头的行,您只需使用tail即可。例如,给定文件a.txt

$ cat > a.txt
one
two
three
four
five
^D

...您可以从第三行开始,省略前两行,方法是为+参数传递一个以-n为前缀的数字:

$ tail -n +3 a.txt
three
four
five

(或者简称tail +3 a.txt。)

要省略文件末尾的行,您可以使用head执行相同操作,但前提是您拥有GNU coreutils版本(例如,Mac OS X附带的BSD版本不会工作)。要省略文件的最后两行,请为-n参数传递一个负数:

$ head -n -2 a.txt
one
two
three

如果您的系统上没有head的GNU版本(并且您无法安装它),则必须使用其他方法,例如@ruifeng提供的方法。

答案 1 :(得分:2)

列出文件的最后10行以外的所有行:

head -n -10 file

列出文件的前10行以外的所有行:

tail -n +10 file

答案 2 :(得分:1)

要剪掉前10行,你可以使用其中任何一个

awk 'NR>10' file
sed '1,10d' file
sed -n '11,$p' file

要剪切最后10行,您可以使用

tac file  | sed '1,10d' | tac

或使用head

head -n -10 file

答案 3 :(得分:0)

cat a.txt | sed '1,10d' | sed -n -e :a -e '1, 10!{P;N;D;};N;ba'

答案 4 :(得分:0)

IFS=$'\n';array=( $(cat file) )
for((i=0;i<=${#array[@]}-10;i++))  ; do echo "${array[i]}"; done