打击文件操作

什么是最好的方法(一行,最好使用头部和尾部)从文件中提取行3-5和11-13?

这完成了第一部分,但我怎样才能抓住11-13没有一团糟? 的xD

head -5 some_file | tail -3 > output_file 

我觉得sed可以很容易地做到sed -n -e "3,5p" -e "11,13p" some_file > output_file

-n告诉sed不要输出每一行。 -e'告诉sed打印出哪些部分。 无法看到你是如何做到这一点头部和尾部: head -5只给你前5行,所以你不能只是把它尾巴 – 你需要一个新的命令,所以看看更复杂的东西,如:

 head -5 some_file > output_file; tail -3 some_file >> output_file 

awk你可以这样做:

 awk '(NR>=3 && NR<=5) || (NR>=11 && NR<=15) {print}' some_file >output_file 

Glenn Jackman建议的简化版本:

 awk '(NR >= 3 && NR <= 5) || (NR >= 11 && NR <= 15)' some_file >output_file 

最好的方法是用sed

 sed '1,2d; 6,10d; 14,$d' some_file 

引号中的位是命令,分号是命令分隔符。 1,2d6,10d删除第1行到第2行,第6到第10行,第14行14,$d删除第14行直到文件结尾。 我不得不承认我更喜欢亚历克西斯的答案:

 sed -n '3,5p; 11,13p' some_file 

如果只是因为它说“打印行3-5和11-13”而没有别的,而不是我的,说删除你不想要的行。

如果你坚持只用headtail

 (head -5 some_file | tail -3; head -13 some_file | tail -3) 

尝试这个:

 sed -n -e 3,5p -e 11,13p some_file 

你可以合并两个管道:

 (head -5 some_file | tail -3; head -13 some_file | tail -3) > output_file