美文网首页
Sed(一)

Sed(一)

作者: Llewyn_Davis | 来源:发表于2018-12-05 11:38 被阅读0次

    2018-12-5笔记


    Sed基础用法

    语法格式

    $ sed [options] '{range command}' {input files}
    

    options

    1. -n,抑制默认输出
    2. -e,执行多条命令
    3. -f,执行sed脚本文件
    4. -i,直接修改源文件,-ibak会生成源文件的备份文件

    range

    使用行号

    1. 指定行,sed -n '2 p' fname.txt
    2. 逗号,sed -n '2, 4 p' fname.txtsed -n '2, $ p' fname.txt
    3. 加号
    4. 波浪号,sed -n '2~4 p' fname.txt

    使用模式

    1. 单一模式,sed -n '/hello/ p' fname.txt,与指定的行号一样,指定存在hello的行
    2. 模式与数字,sed -n '/hello/, 4 p' fname.txt,相当于取第一次出现hello的行号,作为起始行号,因此结束行号也可以用模式替代。注意点,如果前4行没有hello,则退化成1
    3. 模式与加号

    commands

    1. p,打印行
    2. d,删除行
    3. w fname.txt,保存行到文件

    替换命令

    替换命令的语法格式为,s/search/replacement/flags,例如

    $ sed 's/hello/hi/' fname.tx
    

    以默认的替换方式(没有flags),将fname.txt中的hello(search)替换成hi(replacement)
    上述的/属于命令分界符,还可以使用#@!作为分界符,避免出现烦人的转义。

    search
    • 使用确定性文本进行搜索,例如helloTom
    • 使用正则表达式进行搜索
    replacement
    • 使用确定性文本
    • 引用正则表达式的分组
      • &用于表示匹配到的search,相当于Pythonregroup(0)
      • 括号分组使用\1开始(最多9个分组,即\9),用于进行分组回溯
    • GNU专用
      以下主要用于replacement中,主要是结合分组来使用,不然实际意义不大,因为分组匹配出来的文本是符合某个模式的,我们并不知道实际文本如何。
      • 持续型转换
        • \U,大写模式,将其后的所有分组变成大写
        • \L,小写模式,将其后的所有分组变成小写
        • \E,正常模式,不改变分组的大小写
      • 单字符型
        • \u,转换其后第一个字符为大写
        • \l,转换其后第一个字符为小写
    flags
    1. gsed默认只替换第一个,使用全局标志g,可以实现全部替换,相当于times,默认为1
    2. 数字标志,相当于start,第几个开始执行替换
    3. p,打印替换后的行,需与-n一起使用
    4. w fname.txt,将替换后的行写入文件
    5. i,忽略search的大小写(仅用于GNU的sed)
    6. e,将替换后的行作为shell命令执行

    相关文章

      网友评论

          本文标题:Sed(一)

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