• sed 流编辑器


    一、简介

    非交互式的处理 一行一行的读入处理 占用系统空间少 大文件一般用sed节省内存

    语法:语法 sed [选项] '行的定位 动作' 文件...

    参数 说明
    -e 允许进行多项编辑
    -n 静默输出 关闭模式空间的输出 不会输出未匹配的行 一般与p命令联合使用
    -r 允许使用扩展正则
    -i 直接作用于原文件 没有输出 在使用前先不加 看看效果
    -i.bak 修改原文件前先备份
    -f 后接sed脚本

    二、示例

    命令说明
    sed -r 's/(.)(.)/\2/' pass 删除每行的第一个字符
    sed -r 's/(.)/hello\0/' pass 在每行行首插入hello
    sed -r 's/(.)(.)/\1/' pass 删除每行的第二个字
    sed -r 's/[0-9]/(\0)/g' pass 把每个数字用()括起来 如:(1)(2)
    sed -r 's/[0-9]+/(\0)/g' pass 把每个数值用()括起来 如:(12)
    sed -r 's/(.)(.)$/\2/g' pass 删除每行的倒数第二个字符
    sed -r 's/(.)(.*)(.)/\3\2\1/g' pass 交换每行的第一个和最后一个字符
    sed -r 's/<[a-zA-Z]{3}>//g' pass 删除刚好三个字符的单词
    sed -r 's/ro | da/A/g' pass 把ro或da替换成A
    sed -r 's/[a-zA-Z]+//' pass 删除每行的第一个单词(纯字母)
    sed -r 's/([a-zA-Z]+)(.*)(<[a-zA-Z]+)(a-zA-Z)([a-zA-Z]+)$/\3\2\1\4\5/g' pass 交换第一个和倒数第二个单词(纯字母)
    sed 's/root/ROOT/2' /tmp/passwd 把第二个root替换成ROOT
    sed 's/root/ROOT/g2' /tmp/passwd 把每一行第二个开始的root替换成ROOT
    cat -n /etc/passwd > /tmp/pass 将passwd编号写入到pass
    cat -n /etc/passwd | head >/tmp/pass 将passwd前十行编号写入到pass
    sed -r 's/\b[a-zA-Z]{4}\b/AAAA/g' pass 将刚好4个字符的单词替换成AAAA (abcd)
    sed 's/b{4}/AAAA/g' pass 将bbbb替换成AAAA

    三、加参数示例

    命令说明
    sed -nr '/^root/p' /tmp/pass 以root开头行
    sed -n '1~2' /xx/xx 奇数行
    sed -n -e '2p' -e '5p' /tmp/pass 2 5行
    sed -n -e '2p;5p' /tmp/pass 2 5行
    sed -n -e '2,5p' /tmp/pass 2-5行
    sed -nr '/sh/,/xx/p' /tmp/pass 以sh开始 以xx结尾
    sed -n -f sed.sh /tmp/pass 接sed脚本
    sed '1!d' passwd 删除除第一行以外的所有行
    sed '/root/ w /tmp/a.txt' passwd 将passwd含root的行写入到/tmp/a.txt里
    sed '2 i hello' passwd 在第二行前面插入hello
    sed 'y/abc/ABC/' passwd 将passwd里的abc一一对应替换成ABC
    sed 's/[a-z]/\u&/g' passwd 小写字母换成大写字母
    sed 's/[A-Z]/\l&/g' passwd 大写字母换成小写字母
    sed '2 a hello' passwd 在第二行后面追加hello
    sed '2 c hello' passwd 将第二行替换成hello
    sed -n '2{n;p}' passwd 打印第二行的下一行
    sed '8q' passwd 处理第8行后退出sed

    四、模式空间,保留空间

    模式空间:用于处理文本行

    保留空间:用于保存已处理完的文本行 最大保存8192字节 默认有一个空行

    命令:d  删除模式空间里的内容,开始下一个循环

       h H 复制/追加模式空间的内容到保留空间

       g G 复制/追加保留空间的内容到模式空间

       x  交换保留空间和模式空间的内容

    命令说明
    sed '1h;1d;2G' passwd 将第一行第二行替换输出
    sed '1h;1d;2G;2h;2d;3G' passwd 输出3 2 1行 2G后2 1行为一个整体2行
    sed '1,$ a \ ' passwd sed 'G' pass 每行后面加上空行
    sed '1h;1d;2,9{G;h;d;};10G ' passwd 从末尾往上查看文件 
    sed '1!G;$!h;$!d' pass
    sed -r '1h;2~2G ' passwd 在偶数行下添加第一行的内容
    sed '/sh$/ r /etc/redhat-release' pass 在sh结尾的行下方插入文件内容

    五、匹配换行符

    sed ":label;N;s/\n/ /;b label" test.txt

    正常情况下sed无法匹配换行符,这是因为sed 模式是以\n换行符作为行的结束标记的

    label:    这是一个标签,用来实现跳转处理,名称可自取,后面的 b label 就是跳转指令
    
    N:        N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见
    
    s/\n/ /:  替换命令,将换行符替换成空行
    
    b label:  b是sed的跳转命令,跳转到指定的标签处
  • 相关阅读:
    cmd的操作命令导出导入.dmp文件
    转:String数组初始化
    Oracle计算时间差
    WEB-INF目录与META-INF目录的作用
    【神乎其神】这些EXCEL技巧,太神奇了,赶紧收藏!
    报错: The type ByteInputStream is not accessible due to restriction on required library
    ModelAndView对象作用
    shiro使用
    包装类型的比较,如:Integer,Long,Double
    转一个distinct用法,很有帮助
  • 原文地址:https://www.cnblogs.com/Xinenhui/p/16250116.html
Copyright © 2020-2023  润新知