• sed的介绍及应用


    sed 文本三剑客之一

    sed是一种流编辑器,一次处理一行内行。

    如果只是展示,会放在缓冲区(模式空间),展示结束之后,会从模式空间把操作结果删除。

    工作模式一行一行处理,处理完当前行,才会处理下一行,直到文件末尾。(全局扫描)

    sed的命令格式及操作选项:

    sed -e ‘操作符’ -e ‘操作符’ 文件1 文件2

    -e 表示可以跟多个操作符,只有一个操作,-e可以省略。

    sed -e ‘操作符1;操作符2’ 文件1 文件2、

    选项:

    -e :用于执行多个操作命令

    -f :在脚本中定义好了操作符,然后根据脚本内容的操作符对文件进行操作。

    -i :直接修改目标文件(慎用)

    -n :仅显示script处理后的结果(不加-n sed有两个输出结果,加了-n 之后就会把默认输出屏蔽,只显示一个结果)

    操作符:

    p: 打印结果

    打印功能:

    寻址打印:按照指定的行来进行打印

    sed -n ‘=’ test.txt
    sed -n '=;p' test1.txt
    sed -n '4p' test1.txt

    打印最后一行

    sed -n '$p' test1.txt

    行号范围打印

    第二行到四行
    sed -n '2,4p' test1.txt
    第二行和第四行
    sed -n '2p;4p' test1.txt

    打印奇数行和偶数行

    打印奇数行
    sed -n 'p;n' test1.txt
    打印偶数行
    sed -n 'n;p' test1.txt
    n的作用,跳过一行,打印下一行

    如何对文本内容进行过滤

    sed -n '/o/p' test1.txt
    过滤并打印包含o的行,/ / 里面包含过滤的内容

    使用正则表达式对文本内容进行过滤

    sed -n '/^root/p' /etc/passwd

    从指定行开始,打印到第一个以bash为结尾的行

    sed -n '42,/bash$/p' /etc/passwd

    r:使用扩展正则表达式

    sed -rn '/(^root)|(bash$)/p' /etc/passwd
    面试题:如何免交互删除文本内容,但是不删除文件
    两种方法:
    cat /dev/null > 文件名
    sed -i 'd' test1.txt
    删除文件内容,不删除文件
    sed -i ‘d’ + 文件名

    d:删除行

    删除操作:

    sed -n '3d' test1.txt
    删除第三行,打印剩余的行
    sed -n '5,$d;p' test1.txt
    删除第五行到末尾行,打印剩余的行
    sed -n '1!d;p' test1.txt
    删除除了第一行所有的行
    sed -n '4,6!d;p' test1.txt
    删除除了第四行到第六行所有的行
    ! 取反的意思

    匹配字符串删除行

    sed '/s/d' test1.txt
    / /  匹配字符的内容
    面试题 :如何删除空行
    grep -v "^$" test1.txt
    ​
    cat test1.txt | tr -s "\ n"
    ​
    sed  '/^$/d' test1.txt

    s:替换字符串

    sed -n 's/ / /p'
    替换字符串的格式
    sed -n 's/root/test/p' /etc/passwd
    只替换一个
    sed -n 's/root/test/2p' /etc/passwd
    替换指定位置
    sed -n 's/root/test/gp' /etc/passwd
    替换所有的
    sed 's/[a-z]/\u&/' test1.txt
    \u& 转换首字母大写的特殊符号,\转义符
    首字母变成大写
    sed 's/[a-z]/\u&/g' test1.txt
    转换所有的字母变成大写的在后面加g
    sed 's/[A-Z]/\l&/' test1.txt
    \l&转换首字母小写的特殊符号
    sed 's/[A-Z]/\l&/g' test1.txt
    转换所有的字母变成小写的在后面加g,同上

    c:替换行

    整行替换:

    sed '/要替换的内容/c 替换的内容'
    sed '/1GGG/c nihao' test1.txt
    c的位置与s的位置不一样,一个在前一个在后

    y:替换单个字符。多个字符替换必须和替换内容的字符长度保持一致

    sed -e 'y/one/111/' test1.txt
    字符串的长度要相同,不然会报错

    a:增加,在指定行的下面一行插入内容

    sed '/3333/a bbbb' test1.txt

    i:增加,在指定行的上面一行插入内容

    sed '/3333/i bbbb' test1.txt

    r: 在行后增加文本内容

    sed '/3333/r  bbbb' test1.txt

    $a : 在最后一行插入内容

    sed '$a/3333/ bbbb' test1.txt

    $i:在倒数第二行插入内容

    sed '$ai3333/ bbbb' test1.txt

    $r:读取其他文件内容插入到对象文件的最后一行

    使用sed命令对字符串和字符的位置进行互换。

    echo baominmin |sed -r 's/(bao)(min)(min)/\3\1\2/'
    使用分组的方式来进行替换
    echo xxxxx |sed -r 's/(.)(.)(.)(.)(.)/\5\4\3\2\1/'

    sed的主要作用就是对文本的内容进行增删改查

    其中最好用最强大的就是增删改查。

    面试题:如何把版本号提取出来
    ant-1.9.7.jar
    ant-launcher-1.9.7.jar
    antlr-2.7.7.jar
    antlr-runtime-3.4.jar
    aopalliance-1.0.jar
    archaius-core-0.7.6.jar
    asm-5.0.4.jar
    aspectjweaver-1.9.5.jar
    bcpkix-jdk15on-1.64.jar
    bcprov-jdk15-1.46.jar
    bcprov-jdk15on-1.64.jar
    checker-compat-qual-2.5.5.jar

    用grep来提取

    grep -E "[0-9]+\." test2.txt

    用sed提取

    cat test2.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
    面试题:打印指定时间内的日志。

    sed -n '/Jun 21 11:00:01/,/Jun 14:01:01/p' /var/log/messages

  • 相关阅读:
    kylin使用心得
    GreenPlum的学习心得和知识总结(二)|打造Greenplum数据库内核开发环境
    Rust的数据,函数及控制流内容总结
    块级元素设置背景颜色后,背景颜色直接占据一整行的处理
    带你了解MySQL数据库(五)
    Docker遇到的一些问题和感想
    我HTTP协议用的好好的,为什么还要用RPC协议?
    Jsoup CookBook Java HTML 解析器使用文档
    7_JS关于数据代理_Object.defineProperty_Vue数据代理_双向绑定
    使用open3d可视化3d人脸
  • 原文地址:https://blog.csdn.net/2402_84868182/article/details/139862727