07_sed

1.sed是一款流编辑工具,用来对文本进行过滤与替换工作,特别是当你想要对几十个配置文件做统计修改时,你会感受到sed的魅力!
  sed通过输入读取文件内容,但一次仅读取一行内容进行某些指令处理后输出,所以sed更适合于处理大数据文件。
.sed流程:
        * 通过文件或管道读取文件内容。
        * sed并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space)。
        * 根据sed的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出即屏幕上。
              输入
        ------------------------------------------------
                      |
                      |
                      v
                      v
            读取一行内容,并复制到模式空间    <------------ sed 指令
                      |
                      |
                      v
                      v
        ------------------------------------------------
                输出经过处理后的内容
二、sed基本语法结构
sed  Options...  [script]   [inputfile...]
sed  选项...       [脚本指令]      [输入文件]
如果没有输入文件,则sed默认对标准输入进行处理(即键盘输入)。脚本指令是第一个不以“-”开始的参数。
1.选项含义:
    --version            显示sed版本。
    --help               显示帮助文档。
    -n,--quiet,--silent    静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,这些选项可以屏蔽自动打印。
    -e script              允许多个脚本指令被执行。
    -f script-file,
    --file=script-file        从文件中读取脚本指令,对编写自动脚本程序来说很棒!
    -i,--in-place        直接修改源文件,经过脚本指令处理后的内容将被输出至源文件(源文件被修改)慎用!
     -l N, --line-length=N    该选项指定l指令可以输出的行长度,l指令用于输出非打印字符。
     --posix            禁用GNU sed扩展功能。
     -r, --regexp-extended   在脚本指令中使用扩展正则表达式
     -s, --separate        默认情况下,sed将把命令行指定的多个文件名作为一个长的连续的输入流。GNU sed则允许把他们当作单独的文件, 这样如正则表达式则不进行跨文件匹配。
     -u, --unbuffered      最低限度的缓存输入与输出。
//练习
//列出上海大盘2014-05-29日的数据
grep "2014-05-29" gpdata.txt

//列出上海大盘2014-05月份的数据 
grep "2014-05-*" gpdata.txt

//列出上海大盘2014-05月份的数据 统计有多少条
grep "2014-05-*" gpdata.txt | wc -l

列出2014-06月所有上涨的数据   
        1)打印第一行
        grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1 }'

        2)打印第1行和第7行
        grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1, "\t", $7 }'

        3)统计共有多少条
        grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $1, "\t", $7 }' |wc -l

        4)打印符合条件的整行数据 $0
        grep "2014-06-*" gpdata.txt | awk '{ if($7 > 0) print $0}'

     $0代表整个文本行;
 $1代表文本行中的第1个数据字段;
 $2代表文本行中的第2个数据字段;
 $n代表文本行中的第n个数据字段。

5 显示上海大盘2014-02月上涨幅度最大的一天

//-k7指定第7列 sort默认从小到大
grep "2014-02-*" gpdata.txt | sort -n -k7

grep "2014-02-*" gpdata.txt | sort -n -k7|tail -1
grep "2014-02-*" gpdata.txt | sort -n -k7|tail -2
grep "2014-02-*" gpdata.txt | sort -n -k7|tail -3

//-r逆序
grep "2014-02-*" gpdata.txt | sort -n -k7 -r
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -1
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -2
grep "2014-02-*" gpdata.txt | sort -n -k7 -r | head -3

显示上海大盘2014-02月份所有上涨数据的时间和上涨的幅度(%)
grep "2014-02-*" gpdata.txt | awk '{ if ($7 > 0) print $1,"\t\t\t\t" $7 }'

7 显示上海大盘2014-02月份所有上涨数据的时间和上涨的幅度(%),第5-10条之间的数据
//sed -n表示只显示匹配行   p表示打印
grep "2014-02-*" gpdata.txt | awk '{ if ($7 > 0) print $1,"\t\t" $7 }' | sed -n "5,10p"

sed命令的常用用法
    1、按照一个范围(第几行到第几行),提取数据
    2、sed的主要用法是编辑功能,对提取的数据,进行修改、替换、删除、插入等操作
        其中替换必须要会。。

8 列出上海大盘2014-02月份涨跌在1个点和2个点之间的数据    
    grep "2014-02-*" gpdata.txt | awk '{ if($7 > 0 && $7 < 2) print $1 }'
  //打印全年的
  grep "2014-*" gpdata.txt | awk '{ if($7 > 0 && $7 < 2) print $1,"\t\t", $7 }'

//在目录中查找*.sh的文件,检索*.sh文件中"case关键字出现的文件名和行号
    find -name "*.sh" | xargs grep -n "case"
//提取出行号
find -name "*.sh" | xargs grep -n "case" | awk -F":" '{ print $1, "\t\t", $2 }'

//sed 打印所有行 
sed -n 'p' 2.txt

//从第3行开始匹配,打印到含有ddd的行
sed -n '3,/ddd/p' 2.txt

//打印空行所在的行号  =表示显示行号
sed -n  '/^$/=' 2.txt 
显示hello所在的行
sed -n '/hello/=' 2.txt 

//将2.txt中的所有的d 替换为 D     g表示所有
//原文件不会修改
sed 's/d/D/g' 2.txt 

//将win下的/r替换为空,将结果重定向到new.txt中
sed -i 's/^M//g' 3.txt>new.txt


文本处理常用技巧总结
find命令:按照文件名,在某一目录下,查找符合条件的目录或者文件
    find -name "*.sh" ./

    grep命令 对文本模式匹配,按照行方式 
        -v 取反 -n显示匹配行及行号 -c输出匹配计数
    awk命令 对文本按照列进行处理或打印
    sort命令 对文本按照行进行排序处理,默认从小到大
    -n按照数字处理 -k7代表第7-r逆序
    sed命令 按照行或者处理文本
    sed -n '1p'     -n按照行定为打印
    sed -n '1,3p'   范围
    sed -n '$p'     代表最后一行
    sed 文本替换
    ipcs | sed -n '/shared/='
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值