一、问题

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. Html 小插件5 百度搜索代码2

    网页添加百度搜索框代码大全 ★ 用法:在下面选择合适的样式,复制代码到网页中相应位置粘贴即可. ★ 样式一(200×30)代码: <iframe id="baiduframe" ...

  2. HDU 3336 Count the string

    题解:利用next数组来保存前缀位置,递推求解. #include <cstdio> #include <cstring> char pat[200005]; int next ...

  3. cocos2d-x游戏开发(十六)帧动画

    欢迎转载:http://blog.csdn.net/dawn_moon/article/details/11775745 本来想写一下帧动画的,搜了一下网上好像有一大把,就懒得写了,直接贴代码. // ...

  4. PHP批量下载方法

      PHP批量下载方法 界面: $.get(“< ?php echo url::base(true);?>inventory/report/buildCsv”, //后台路径 {‘para ...

  5. proguard混淆jar文件

    Proguard是个优秀的java混淆工具,使用示例如下,一个java工程对外接口代码如下(无需混淆) package com.ciaos.open; import com.ciaos.inner.I ...

  6. Oracle中的Spool缓冲池技术可以实现Oracle导出txt格式文件

    利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件 1.在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool d:output.txt; 2.设 ...

  7. ubuntu 16.04环境配置

    ubuntu 16:1.源cp /etc/apt/sources.list /etc/apt/sources.list.bkpvi /etc/apt/sources.list-+{    deb ht ...

  8. CDH集群频繁告警(host频繁swapping)

    最近CDH集群频繁告警,原因是某些host频繁swapping,极大影响了集群的性能. 后来发现有个设置(/proc/sys/vm/swappiness)需要修改,默认值60 Setting the ...

  9. select标签操作大全

    http://blog.csdn.net/hhhh2012/article/details/8610336

  10. win7 64位 TortoiseSVN-1.8.4客户端安装

    下载地址链接:http://pan.baidu.com/s/1nukeBVz 密码:tc79 (32 64位都有,注意区分) next一路安装 安装好后,在需要和服务器同步的文件夹图标上--鼠标右键- ...