linux工具

来源:互联网 发布:清华大学矩阵论视频 编辑:程序博客网 时间:2024/05/18 02:37

==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 aaaaaaabbbbbbccccccddddddddadasdasdcc135100024441231231243122312dasdas21321eqwd3212312ef2343e21321edar3dcsdvawdascase123wwdqwd763608087@qq.comwww.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 ###表示删除一行aaaaaaabbbbbbccccccdddddddadasdasdcc1231231243122312dasdas21321eqwd3212312ef2343e21321edar3dcsdvawdascase123wwdqwd
    2. n读入下一行

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

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/a\telnum' file aaaaaaabbbbbbccccccdddddddadasdasdcc13510002444telnum1231231243122312dasdas21321eqwd3212312ef2343e21321edar3dcsdvawdascase123wwdqwd
    4. i\插入文字(匹配行文字前输出)

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/i\telnum' file aaaaaaabbbbbbccccccdddddddadasdasdcctelnum135100024441231231243122312dasdas21321eqwd3212312ef2343e21321edar3dcsdvawdascase123wwdqwd
    5. c\替换文字(将文字替换匹配文字进行输出)

      [a@localhost ~]$ sed -r '/1[3578][0-9]{9}/c\telnum' file aaaaaaabbbbbbccccccdddddddadasdasdcctelnum1231231243122312dasdas21321eqwd3212312ef2343e21321edar3dcsdvawdascase123wwdqwd
    6. s 模式替换 找到匹配行,进行匹配替换操作

      [a@localhost ~]$ sed 's/a/telnum/' file telnumaaaaaatelnumdsdsaabbbbbbccccccdddddddtelnumdasdasdcc135100024441231231243122312dtelnumsdas21321eqwd3212312ef2343e21321edtelnumr3dcsdvawdtelnumscase123wwdqwd
    7. g参数 在该行中,替换所有匹配而不是替换第一次匹配

      [a@localhost ~]$ sed 's/a/telnum/g' file telnumtelnumtelnumtelnumtelnumtelnumtelnumtelnumdsdstelnumtelnumbbbbbbccccccdddddddtelnumdtelnumsdtelnumsdcc135100024441231231243122312dtelnumsdtelnums21321eqwd3212312ef2343e21321edtelnumr3dcsdvtelnumwdtelnumsctelnumse123wwdqwd
      1. n参数 在该行中,替换第n个匹配
      [a@localhost ~]$ sed 's/a/telnum/2' file atelnumaaaaaadsdstelnumabbbbbbccccccdddddddadtelnumsdasdcc135100024441231231243122312dasdtelnums21321eqwd3212312ef2343e21321edar3dcsdvtelnumwdasctelnumse123wwdqwd
      1. p参数 对该行执行替换,并输出该行文字

        [a@localhost ~]$ sed -n 's/a/telnum/p' file telnumaaaaaatelnumdsdsaadtelnumdasdasdcc2312dtelnumsdas21321edtelnumr3dcsdvawdtelnumscase123wwdqwd
      2. w filename 参数 将替换后的该行写入filename文件中

        [a@localhost ~]$ sed -n 's/a/telnum/wnew' file [a@localhost ~]$ cat new telnumaaaaaatelnumdsdsaadtelnumdasdasdcc2312dtelnumsdas21321edtelnumr3dcsdvawdtelnumscase123wwd
  • 多行处理
    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
原创粉丝点击