linux工具

==linux工具==

sed流式编辑器

1.工作原理

当sed由标准输入读取一行资料并放入pattern space(模式空间)时,sed按照sed script 的编辑指令逐一对pattern space内的资料执行编辑,之后再有pattern space内的结果送到标准输出,接着再将下一行资料读入。重复执行上述动作,直至读完所有资料行结束为止,另外,sed还有hold space(保持空间)可以作为暂时的文本保存区,跟pattern space进行交互。

2.实现
  • 命令选项
    1. -n :只打印模式匹配的行
    2. -e :直接在命令行模式上进行sed动作编辑
    3. -f : 将sed的动作写入一个文件内,用 -f filename 执行filename 内sed动作
    4. -r :支持扩展表达式
    5. -i :直接修改文件内容
  • 命令格式
 sed [option]'sed command' filename
    option正则表达式
  • 脚本格式
sed [option] -f 'sed script' filename

实例

[a@localhost ~]$ cat file 
aaaaaaa
bbbbbb
cccccc
ddddddd
dadasdasdcc
13510002444
123123124312
2312dasdas
21321eqwd321
2312ef2343e
21321edar3dcsdva
wdascase123wwdqwd
763608087@qq.com
www.baidu.com
[a@localhost ~]$ sed -n '/^a/p' file #只显示以a开头的行 
aaaaaaa
  • command参数

    1. d删除一行

      [a@localhost ~]$ sed -n -r '/1[3578][0-9]{9}/p' file ##提取手机号码 
      13510002444
      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/d' file ###表示删除一行
      aaaaaaa
      bbbbbb
      cccccc
      dddddd
      dadasdasdcc
      123123124312
      2312dasdas
      21321eqwd321
      2312ef2343e
      21321edar3dcsdva
      wdascase123wwdqwd
    2. n读入下一行

    3. a\加入文字(匹配行文字后输出)

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/a\telnum' file 
      aaaaaaa
      bbbbbb
      cccccc
      dddddd
      dadasdasdcc
      13510002444
      telnum
      123123124312
      2312dasdas
      21321eqwd321
      2312ef2343e
      21321edar3dcsdva
      wdascase123wwdqwd
    4. i\插入文字(匹配行文字前输出)

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/i\telnum' file 
      aaaaaaa
      bbbbbb
      cccccc
      dddddd
      dadasdasdcc
      telnum
      13510002444
      123123124312
      2312dasdas
      21321eqwd321
      2312ef2343e
      21321edar3dcsdva
      wdascase123wwdqwd
    5. c\替换文字(将文字替换匹配文字进行输出)

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/c\telnum' file 
      aaaaaaa
      bbbbbb
      cccccc
      dddddd
      dadasdasdcc
      telnum
      123123124312
      2312dasdas
      21321eqwd321
      2312ef2343e
      21321edar3dcsdva
      wdascase123wwdqwd
    6. s 模式替换 找到匹配行,进行匹配替换操作

      [a@localhost ~]$ sed 's/a/telnum/' file 
      telnumaaaaaa
      telnumdsdsaa
      bbbbbb
      cccccc
      dddddd
      dtelnumdasdasdcc
      13510002444
      123123124312
      2312dtelnumsdas
      21321eqwd321
      2312ef2343e
      21321edtelnumr3dcsdva
      wdtelnumscase123wwdqwd
    7. g参数 在该行中,替换所有匹配而不是替换第一次匹配

      [a@localhost ~]$ sed 's/a/telnum/g' file 
      telnumtelnumtelnumtelnumtelnumtelnumtelnum
      telnumdsdstelnumtelnum
      bbbbbb
      cccccc
      dddddd
      dtelnumdtelnumsdtelnumsdcc
      13510002444
      123123124312
      2312dtelnumsdtelnums
      21321eqwd321
      2312ef2343e
      21321edtelnumr3dcsdvtelnum
      wdtelnumsctelnumse123wwdqwd
      1. n参数 在该行中,替换第n个匹配
      [a@localhost ~]$ sed 's/a/telnum/2' file 
      atelnumaaaaa
      adsdstelnuma
      bbbbbb
      cccccc
      dddddd
      dadtelnumsdasdcc
      13510002444
      123123124312
      2312dasdtelnums
      21321eqwd321
      2312ef2343e
      21321edar3dcsdvtelnum
      wdasctelnumse123wwdqwd
      
      1. p参数 对该行执行替换,并输出该行文字

        [a@localhost ~]$ sed -n 's/a/telnum/p' file 
        telnumaaaaaa
        telnumdsdsaa
        dtelnumdasdasdcc
        2312dtelnumsdas
        21321edtelnumr3dcsdva
        wdtelnumscase123wwdqwd
      2. w filename 参数 将替换后的该行写入filename文件中

        [a@localhost ~]$ sed -n 's/a/telnum/wnew' file 
        [a@localhost ~]$ cat new 
        telnumaaaaaa
        telnumdsdsaa
        dtelnumdasdasdcc
        2312dtelnumsdas
        21321edtelnumr3dcsdva
        wdtelnumscase123wwd
  • 多行处理
    1. 参数
    2. N 与匹配行时,再读入下一行,加在当前patern space文字的后面
    3. 将pattern space第一个newline字母前的文字删去,仅一个newline字母时,相当于d命令
    4. 存取暂存区的命令(hold space与pattern space交互)
    5. h pattern space 拷贝到hold space
    6. H pattern space 追加到hold space 后
    7. g hold space 拷贝到pattern space
    8. G hold space 追加pattern space
    9. x 交换两个空间的内容
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值