欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sed用法

程序员文章站 2022-03-04 17:53:42
...

sed命令的选项

sed [选项] [动作]

  1. 选项与参数:
    -r :支持正则表达式
    -i :直接修改读取的文件内容,而不是输出到终端。
    -n:使用安静(silent)模式,只有经过sed 特殊处理的那一行(或者动作)才会被列出来。(在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上)

  2. function:
    s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
    c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
    d :删除行
    a :后新增行
    i :前插入行
    p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
    一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。

sed正则中的元字符

$ 表示行尾
^ 表示行首
[a-z0-9]表示字符范围
[^]表示除了字符集中的字符以外的字符
. 表示任意字符
*表示零个或者多个
sed的正则中 () 和 {} 需要转义

d删除行

   #!/bin/bash
   for i in range(1.8)
           result +=i
           return result
  1. 删除第 2-4 行
  sed -i -r '2,4'd test.txt 
  1. 删除以 for 开头的行
  sed -i -r '/^for/d' test.txt
  1. 删除含有字符串 result 的行
  sed -i -r '/result/d' test.txt

c替换行

  1. 将第一行文字替换为 helloworld
  sed -i -r '1c hello world' test.txt
  1. 将含有字符串 result 的行内容替换为 helloworld
  sed -i -r '/return/c hello world' test.txt

ai新增行

  1. 在第一行前新增一行内容为 ########
  sed '1i #########' test.txt

替换部分字符串

   #!/bin/bash
   for i in range(1.8)
           aa = 1aa
           aa = 2aa
           2bb = bb
           result +=i
           return result
  1. 将每行的第一个aa替换为 AA
  sed -i -r 's/aa/AA' test.txt
  1. 将全文所有的aa替换为 AA
  sed -i -r 's/aa/AA/g' test.txt
  1. 将第一行的b替换为B
  sed -i -r '1s/b/B/g' test.txt
  1. 将第3行到最后一行的aa替换为AA
  sed -i -r '3,$s/aa/AA/g' test.txt
  1. 将以数字开头的行中 bb替换为BB
  sed -i -r '/^[0-9]/s/bb/BB/g' test.txt
  1. 将含有字符串 bin 的行中 ba 替换为 BA
  sed -i -r '/bin/s/ba/BA/g' test.txt

搜索并输出行内容

  1. 搜索第二行并只输出第二行
  sed -n '2p' test.txt                      #p搜索,n安静模式
相关标签: sed