sed删除增加替换多行内容

现在有个 setup.py 文件有包含以下一段内容:

# 其它代码 ...

speedups = Feature(
    'optional C speed-enhancement module',
    standard=True,
    ext_modules=[
        Extension('markupsafe._speedups', ['markupsafe/_speedups.c']),
    ],
)

# 其它代码 ...

如何用 sed 命令把这几行内容删掉或者注释掉?


OK,刚刚看了文档试了下,问题解决了,命令行如下:

cat setup.py | sed "/^speedups = Feature/,/^)$/s/.*//g"

先选定从 speedups = Feature 开始到右括号 ) 结束的范围内的文本行,然后都替换成空。

也可以用 d 指令实现:

sed -i "/^speedups = Feature/,/^)$/d" setup.py

sed的行追加(模式前后)和行替换

有时候我们要将一句话插入到一个文件中,也许你就想到了echo >> ,但是这是追加到文件的末尾,我要是追加到其中的某一行之前或之后呢,sed可以实现

 

 
  1. # cat a.txt
  2. 1234569
  3. abcABCabc

1、怎么样用一行或者多行替换一行

sed的替换模式,s/xx/oo/这个可以实现我们的进行行替换的要求,那就是将要替换的内容换成xx,当前行替换需要用到c参数:

 

 
  1. # sed -e '/123/c\hello' a.txt
  2. hello
  3. abcABCabc

c\它俩之间可是紧挨着的,要是替换的行很长,一行写不开呢,那就再加一个”\”:

 

 
  1. # sed -e '/123/ c\hellosologg\so long' a.txt
  2. hellosolonggso long
  3. abcABCabc

要是增加两行呢?哪就加个\n

 

 
  1. # sed -e ‘/123/ c\solongg\nso long’ a.txt
  2. solongg
  3. so long
  4. abcABCabc

2、怎么样在一行或多行之前,之后增加一行或多行

sed 可以在匹配的模式之前(i)或之后(a)增加一行或多行;在匹配的模式之前(i):

 

 
  1. # sed -e ‘/123/ i\solongg’ a.txt
  2. solongg
  3. 1234569
  4. abcABCabc

增加两行

 

 
  1. # sed -e ‘/123/ i\solongg\nso long’ a.txt
  2. solongg
  3. so long
  4. 1234569
  5. abcABCabc

在匹配的模式之后(a)

 

 
  1. # sed -e ‘/123/ a\solongg’ a.txt
  2. 1234569
  3. solongg
  4. abcABCabc

增加两行:

 

 
  1. # sed -e ‘/123/ a\solongg\nso long’ a.txt
  2. 1234569
  3. solonggg
  4. so long
  5. abcABCabc

 

 

你可能感兴趣的:(Linux)