【记录】sed命令

sed命令

sed处理文本的默认流程

在这里插入图片描述

sed命令的语法格式

-n :默认情况下,sed打印所有已处理的输入(除了已被命令(如d)修改/删除的输入)。 使用-n可以抑制输出,使用p命令可以打印特定的行。
-e :直接在命令行模式上进行sed动作编辑,此为默认选项
-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
-r :支持扩展表达式
-i :直接修改文件内容

  • 命令行执行格式:

    sed [option] 'sed command' filename
    
  • 脚本脚本格式

    sed [option] -f 'sed script' filename
    

sed的编辑命令

Untitled Database

使用sed进行文本的增删改查

💡 sed以行为单位进行文本处理

sed '/(查询规则)/(增删改字符)'
  • 格式含义
    x查询第x行
    x, y查询x行到y行
    /pattern查询满足模式的行
    /pattern /pattern查询包含两个模式的行
    pattern/,x从起始行到第x行查询包含模式的行
    x,/pattern/从第x行开始模式查询匹配的行
    x,y!查询不包含指定行号x到y的行
  • 增:新增行。使用命令i,a

  • 删:删除行。使用命令d

  • 改:修改行。使用命令c,s

使用示例(前加!表示不执行)

  • p命令

    
    sed '/pattern/p' #打印匹配的行,除了把文件内容打印出来还额外打印一遍匹配pattern的行,要只输出处理结果,应加上-n选项
    
  • d命令

    sed '/pattern/d' #删除匹配的行
    
  • n,N命令

    n读取下一行到pattern space。由于pattern space中有按照正常流程读取的内容,使用n命令后,pattern space中又有了一行,此时,pattern space中有2行内容,但是先读取的那一行不会被删除;当n命令后,还有其他命令p的时候,此时打印出的结果是n命令读取的那一行的内容。

    N的作用是读取下一行的内容到模式空间(pattern space),可以理解为sed这时候把两行读入成中间带\n的一行内容,原本sed的执行原理是逐行读取到模式空间,N促使sed把下一行内容也同时读取到模式空间待命。

    原来N还有另外一个特性:当无法处理下一行内容时,N则会中止退出,所以后面的命令也不会再执行。

    $!N 对最后一行不再执行N命令,但是会继续执行命令,

    💡 sed使用n命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何sed命令都将应用到匹配行紧接着的下一行上。

    sed '/pattern/{n;s/pattern1/pattern2/;}' datafile #将pattern匹配行的下一行应用s/pattern1/pattern2/
    
  • s命令
    💡
    /pattern/s/pattern1/pattern2/ #查找匹配的行,将该行第一个匹配pattern1的字符串替换为pattern2
    /pattern/s/pattern1/pattern2/g #查找匹配的行,将该行所有匹配pattern1的字符串替换为pattern2

    sed 's/123/hello/'   1.txt  #将每行中第一个匹配的123替换为hello
    
    sed 's/123/hello/g'   1.txt  #将每行中所有匹配的123替换为hello
    
    sed 's/123/hello/2'   1.txt  #将每行中第二个匹配的123替换为hello
    
  • r命令

    sed '3r 2.txt'  1.txt       #在1.txt的第3行之后插入文件2.txt的内容(可用于向文件中插入内容)
    sed  '/245/r   2.txt'   1.txt    #在匹配245的行之后插入文件2.txt的内容,如果1.txt中有多行匹配456则在每一行之后都会插入
    
  • $符号

    💡
    $符号出现在匹配规则中时表示最后一行
    $符号出现在处理规则中时表示一行的末尾

  • ~符号

    sed '1~2d' 1.txt   #从第一行开始删除,每隔2行就删掉一行,即删除奇数行
    
  • +符号

    sed  '/123/,+1d'  1.txt   #删除匹配123的行及其后面一行
    
  • ;符号

    💡 若需要对某个文件应用多个规则,则可以使用分号

    sed 's/^#.*//;/^$/d'  1.txt  #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
    

    等价于

    sed -e'sed command' -e 'sed command' ... filename 
    
  • &符号

    sed 's/^[0-9]/(&)/' 1.txt #将每一行中行首的数字加上一个小括号(^[0-9])表示行首是数字,&符号代表匹配的内容
    
  • {}符号

    sed  '1,3{/123/d}' 1.txt     #删除1~3行中匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行
    sed  -n '/error/{=;p}' 1.txt   #打印匹配error的行的行号和内容
    
  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值