一、问题

Sed和AWK在处理文件方面有很强的优势,还有head和tail等文件处理工具的使用,grep也可实现文本的搜索。上述命令都可以在后面直接加文件名,不需要在前面使用cat添加管道,cat会影响命令执行的效率,本文中cat -n /etc/services实在测试时可很方便的查看到具体的行号。

二、详解

1、查看文件的第20行到30行的内容

以系统的/etc/services为例,cat -n /etc/services可以查看文件的行号。

(1)方法一:head和tail

head -30 /etc/services | tail -11(通过cat -n /etc/services | head -30 | tail -11查看具体行号)。

(2)方法二:sed

sed -n '20,30p' /etc/services(通过cat -n /etc/services | sed -n '20,30p'查看具体行号)。

(3)方法三:awk

awk '{if(NR>19 && NR <31) printf $1"\n"}' /etc/services(通过cat -n /etc/services | awk '{if(NR>19 && NR <31) printf $0"\n"}'查看具体行号)。

2、查看文件的特定行,设置步长

以系统的/etc/services为例,cat -n /etc/services可以查看文件的行号。

每隔十行打印一行数据(比如打印第1行、第11行、第21行):先生成序列号然后查找特定行。

(1)方法一:

sed -n '1~10p' /etc/services查找特定行(通过cat -n /etc/services | sed -n '1~10p' 查看文件的行号)。

(2)方法二:限定从1到51行内,sed方法

  1. #!/bin/bash
  2. for n in `seq 1 10 51`
  3. do
  4. sed -n "${n}p" /etc/services
  5. #cat -n  /etc/services | sed -n "${n}p"
  6. done

(3)方法三:限定从1到51行内,生成序列方式不同

  1. #!/bin/bash
  2. for((i=1; i<52; i=i+10))
  3. do
  4. sed -n "${i}p" /etc/services
  5. #cat -n /etc/services | sed -n "${i}p"
  6. done

(4)方法四:限定从1到51行内,awk方法

awk '{if(NR%10==1 && NR >0 && NR < 51) printf $0"\n"}' /etc/services,

通过cat -n /etc/services | awk '{if(NR%10==1 && NR >0 && NR < 51) printf $0"\n"}'查看文件的行号。

三、总结

(1)Shell脚本的三剑客(awk、sed和grep)的功能很强大,可以相互支持并相互转换。

(2)多从实践中总结不同的方法,多了解他人的思路,有时他人的会更加简洁易懂并拓展了自己的视野。

(3)多从网上找面试题,自己解答,然后对比答案,从痛苦中获取知识。

shell实例浅谈之六文件特定行打印的多种方法的更多相关文章

  1. shell实例浅谈之一产生随机数七种方法

    一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...

  2. (转)shell实例浅谈之产生随机数七种方法

    一.问题 Shell下有时需要使用随机数,在此总结产生随机数的方法.计算机产生的的只是“伪随机数”,不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯一,但一个好的伪随机产 ...

  3. shell实例浅谈之三产生随机数七种方法

    一.问题 Shell下有时须要使用随机数,在此总结产生随机数的方法.计算机产生的的仅仅是"伪随机数".不会产生绝对的随机数(是一种理想随机数).伪随机数在大量重现时也并不一定保持唯 ...

  4. matlab文件读写处理实例(三)——读取文件特定行

    (1) 读取文件特定行 CODE: ; ;        if nline==line               fprintf(fidout,'%s\n',tline);         data ...

  5. 浅谈头文件(.h)和源文件(.cpp)的区别

    浅谈头文件(.h)和源文件(.cpp)的区别 本人原来在大一写C的时候,都是所有代码写在一个文件里一锅乱煮.经过自己开始写程序之后,发现一个工程只有一定是由多个不同功能.分门别类展开的文件构成的.一锅 ...

  6. 浅谈局域网ARP攻击的危害及防范方法(图)

    浅谈局域网ARP攻击的危害及防范方法(图)   作者:冰盾防火墙 网站:www.bingdun.com 日期:2015-03-03   自 去年5月份开始出现的校内局域网频繁掉线等问题,对正常的教育教 ...

  7. Python实例浅谈之五Python守护进程和脚本单例运行

    一.简介 守护进程最重要的特性是后台运行:它必须与其运行前的环境隔离开来,这些环境包括未关闭的文件描述符.控制终端.会话和进程组.工作目录以及文件创建掩码等:它可以在系统启动时从启动脚本/etc/rc ...

  8. bash 取文件特定行

    比如,想要取某文件10-20行 可以用sed sed -n '10,20p' XXX.txt 非常方便!

  9. 浅谈C#中HttpWebRequest与HttpWebResponse的使用方法

    1.第一招,根据URL地址获取网页信息get方法 public static string GetUrltoHtml(string Url,string type) { try { System.Ne ...

随机推荐

  1. 预处理指令中#Pragma

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...

  2. openStack icehouse for centos6.4 production Env 实战

    production Env brief Overview: Management Node:  controller.cc 10.114.100.115 Neutron Network Node:  ...

  3. java程序错误类型及异常处理

    一.程序的错误类型 在程序设计中,无论规模是大是小,错误总是难免的.程序的设计很少有能够一次完成,没有错误的(不是指HelloWorld这样的程序,而是要实现一定的功能,具备一定实用价值的程序),在编 ...

  4. golang(5):编写WebSocket服务,client和html5调用

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 转载请必须注明出处! 1.关于websocket HTML5定义了 ...

  5. 线性规划问题的matlab求解

    函数:[x, fval] = linprog(f, A, b, Aeq, Beq, LB, UB) 返回的x:是一个向量——在取得目标函数最小时各个xi的取值: 返回的fval:目标函数的最小值: 参 ...

  6. UVa1583 Digit Generator

    #include <stdio.h> int main(){    int T, N, i, k, digitsum, generator;    scanf("%d" ...

  7. pure学习笔记

    最近研究Pure,发现这个对于写css来说确实是个好的框架,特此总结了一番,如有错误或不足的地方,欢迎交流指点,轻拍. 此文运用的是优雅的Markdown而书 Pure学习笔记 #写在最前 1# Pu ...

  8. django分页linaro-django-pagination

    1.安装linaro-django-pagination settings INSTALLED_APPS = ( # ... 'linaro_django_pagination', ) MIDDLEW ...

  9. synchronized和vilatile

    第一个程序 public class Test06 implements Runnable{ public int a = 0; public static void main(String[] ar ...

  10. Storm几篇文章

    http://tianhailong.com/ http://www.cnblogs.com/panfeng412/archive/2012/07/02/storm-common-patterns-o ...