sed巩固扩展

作者: awsome365 | 来源:发表于2018-10-14 16:55 被阅读0次

    打印某行到某行之间的内容

    例如:有个文件test的内容如下:
    ert
    fff
    **
    [abcfd]
    123
    324
    444
    [rty]
    **
    fgfgf
    怎么能截取[abcfd]到[rty]之间的内容呢?

    参考:sed -nr '/[abcfd]/,/[rty]/p' tets。sed单引号中命令可以有范围匹配和指定动作,范围可以是像1,5指定行,也可以把数字换成匹配行内容的正则表达式。

    sed转换大小写

    sed中,使用\u表示大写,\l表示小写。

    例1. 把每个单词的第一个小写字母变大写:
    sed 's/\b[a-z]/\u&/g' filename
    \b代表单词开始或结尾,&代表当下匹配的整体。

    例2. 把所有小写变大写:
    sed 's/[a-z]/\u&/g' filename

    例3. 大写变小写:
    sed 's/[A-Z]/\l&/g' filename

    sed在某一行最后添加一个数字

    例如在test文件中a开头的行末添加12:sed 's/\(^a.*\)/\1 12/' test\1代表前面圆括号的整体,也可以用&代替。

    另外补充几个命令:

    • a 在当前行后添加一行或多行
    • i 在当前行之前插入文本
    • c 用新文本修改(替换)当前行中的文本
    • I 匹配字母时不分大小写

    删除某行到最后一行

    sed '/c/{p;:a;N;$!ba;d}' test

    定义一个标签a,匹配c,然后N把下一行加到模式空间里,匹配最后一行时,才退出标签循环,然后命令d,把这个模式空间里的内容全部清除。

    if 匹配"c"
    :a
    追加下一行
    if 不匹配"$"
    goto a
    最后退出循环,d命令删除。

    打印1到100行含某个字符串的行

    参考:sed -n '1,100{/abc/p}' 1.txt

    也可以用多个命令配合管道符完成。上面这个命令提现了sed和awk命令形式的相通性,大括号用来扩起命令组。

    相关文章

      网友评论

        本文标题:sed巩固扩展

        本文链接:https://www.haomeiwen.com/subject/rbftzftx.html