sed用法

sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用。
执行时,把当前要处理的行存储在临时缓冲区中,称为”模式空间“,接着sed命令处理缓存区的内容,处理完后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断的重复,直到文件末尾。
sed主要用来自动编辑一个或者多个文件,简化对文件的反复操作,编写转换程序等。

命令格式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
  • options 常用选项
    • -e 脚本命令 该选项会将其后跟的脚本命令添加到已有的命令;实际就是可以同时执行多条命令。
    • -f 脚本命令文件 该选项将其后文件中的脚本命令添加的已有的命令中
    • -n 需要使用print命令来完成输出
    • -i 直接修改源文件。
  • command 脚本命令
    • s 命令
      格式: [address]s/pattern/replacement/flags
      其中 address:表示指定要操作的具体行。
      pattern:表示需要替换的内容
      replacement:表示要替换的新内容
      flag:标记
      | flags标记 | 功能|

      flags标记功能
      n1~512 之间的数字,表示指定要替换的字符串出现第几次时才进行替换,例如,一行中有 3 个 A,但用户只想替换第二个 A,这是就用到这个标记;
      g对每一行中所有匹配到的内容进行替换,如果没有 g,则只会在该行第一次匹配成功时做替换操作。例如,一行数据中有 3 个 A,则只会替换第一个 A;
      p会打印与替换命令中指定的模式匹配的行。此标记通常与 -n 选项一起使用。
      w file将缓冲区中的内容写到指定的 file 文件中;
      &用正则表达式匹配的内容进行替换;
      \n匹配第 n 个子串,该子串之前在 pattern 中用 () 指定。
      \转义(转义 替换部分 包含的:&,\等)
    • d 删除命令

    • a 指定行后面添加一行

    • i 指定行前面插入一行

    • c 指定行中的所有内容,替换成该选项后面的字符串

    • y 转换命令可以处理单个字符的sed命令

    • r 将一个独立文件的数据插入到当前数据流的指定位置

  • file(s)
  • file表示要替换的文件

举一反三

  1. 替换命令s(以下命令不会直接修改替换文件内容)
  • sed ‘s/are/is/g’ data.txt
    替换data.txt文件中的所有行中的test为trial; s表示替换命令 g表示匹配所有的行以及每一行中的所有匹配内容

  • sed ‘s/are/is/ data.txt’
    替换data.text文件中每一行第一次配合的内容替换。

  • sed -n ‘s/test/trial/p’ data.txt
    替换data.txt文件中的test内容为trial,并且只显示替换后的内容,注意n 和 p的配合使用和区别

  • sed ‘s/test/trial/w test.txt’ data.txt
    w标记时把匹配后的结果保存在指定文件中。

  • 在使用 s 脚本命令时,替换类似文件路径的字符串会比较麻烦,需要将路径中的正斜线进行转义,有两种方法:
    第一种是用转义符

  • sed -n ‘s/^home=.*/home=/home/windos/test/p data.txt’
    第二种是用#代替s命令中的分割符

  • sed -n ‘s#^home=.*#home=/home/windos/test#p’ data.txt

  1. sed d 删除命令(以下命令不会修改文件内容)
  • sed ‘d’ data.txt
    文件中的所有内容都会被删除
  • sed ‘3d’ data.txt
    删除data文件中的第三行内容
  • sed ‘2,3d’ data.txt
    删除data文件中第2-3行内容
  • sed ‘/1/,/3/d’ data.txt
    删除data文件1-3行的内容
  • sed ‘3,$d’ data.txt
    删除data文件中第3行开始的所有内容
  1. sed a i 命令
  • sed ‘3i\this is sed i command’ data.txt
    在第三行前面插入this is sed i command 内容
  • sed ‘3a\this is sed i command’ data.txt
    在第三行后面添加this is sed i command 内容
  1. sed c 命令
  • sed ‘3c\this is test txt’ data.txt
    将data文件中的第三行内容替换为this is test txt
  1. sed r 命令
  • sed ‘3r test.txt’ data.txt
    将test.txt文件内容插入到data文件第三行的后面

sed 脚本命令的寻址方式

在sed 命令中address用来表明该脚本命令作用到文本中的具体行
默认情况下,sed命令会作用于文本数据的所有行,如果只想将命令作用于特定行或者某些行,则必须写明addres部分,表示方法有以下2中:

  1. 以数字形式指定行区间
  2. 用文本模式指定具体行区间
    格式:
[address]脚本命令
adress{
多个脚本命令
}

举一反三

1.以数字形式指定区间

  • sed ‘2s/test/cot/’ data.txt
    表示将data文件的第2行中的test替换为cot
  • sed ‘2,3s/test/cot’ data.txt
    表示将data文件中的2-3行中test替换为cot
  1. 用文本模式指定行区间
    格式: /pattern/command
    sed ‘/home/s/windos/root/’ data.txt
    表示找到data文件的home的所在的行将windos替换为root
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值