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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章