Bash:限制ls和grep的输出

时间:2012-10-05 21:12:59

标签: bash grep ls

让我举一个例子,而不是试着解释我的问题:

noob@noob:~/Downloads$ ls | grep srt$
Elementary - 01x01 - Pilot.LOL.English.HI.C.orig.Addic7ed.com.srt
Haven - 01x01 - Welcome to Haven.DVDRip.SAiNTS.English.updated.Addic7ed.com.srt
Haven - 01x01 - Welcome to Haven.FQM.English.HI.C.updated.Addic7ed.com.srt
Supernatural - 08x01 - We Need to Talk About Kevin.LOL.English.HI.C.updated.Addic7ed.com.srt
The Big Bang Theory - 06x02 - The Decoupling Fluctuation.LOL.English.HI.C.orig.Addic7ed.com.srt
Torchwood - 1x01 - Everything changes.0TV.English.orig.Addic7ed.com.srt
Torchwood - 1x01 - Everything changes.divx.English.updated.Addic7ed.com.srt

现在我只想删除上面命令的第一个four results。通常,如果我必须删除所有文件ls | grep srt$ | xargs -I {} rm {},但在这种情况下我只想删除前四个。

那么,如何限制ls和grep的输出,或者建议我采用另一种方法来实现这一点。

3 个答案:

答案 0 :(得分:4)

您可以将命令移至head -n以限制为n行:

ls | grep srt | head -4

答案 1 :(得分:2)

$ for i in `seq 1 345`; do echo $i ;done | sed -n '1,4p' 
1
2
3
4
geee: ~
$ for i in `seq 1 345`; do echo $i ;done | sed -n '335,360p' 
335
336
337
338
339
340
341
342
343
344
345

答案 2 :(得分:2)

如果您没有太多文件,可以使用bash数组:

matching_files=( *.srt )
rm "${matching_files[@]:0:4}"