Sed删除匹配的行而不留下空白

时间:2017-11-29 11:03:55

标签: bash sed

我有以下文本文件内容:

  

/ FUBAR /鲍勃

     

/ FUBAR /哈里

     

/ FUBAR /哈利 -

     

/ FUBAR /史蒂夫

     

/ FUBAR /添

     

/ FUBAR /添 -

     

/ FUBAR / ATIM

     

/ FUBAR / ATIM -

     

/ FUBAR /简

我使用sed删除所有包含对harry,tim和atim的引用的行。

  

sed -i'#/ fubar / \(harry \ | tim \ | atim \)\(\ - \?\)##' /input/testfile.txt

这给了我以下输出:

  

/ FUBAR /鲍勃

     

     

     

/ FUBAR /史蒂夫

     

     

     

     

     

/ FUBAR /简

.实际上并不存在,只需使用它们来表示文件结构中的空白区域。有没有办法调整sed语句,以便它将删除一行中的空格或我需要第二个sed语句来执行此操作?我似乎无法在网上找到任何将空白区域删除与其他功能相结合的内容。

1 个答案:

答案 0 :(得分:2)

使用可以使用d中的sed(删除)选项:

sed -E '\#/fubar/(harry|tim|atim)#d' file

/fubar/bob
/fubar/steve
/fubar/jane

要将更改保存回文件使用:

sed -i.bak -E '\#/fubar/(harry|tim|atim)#d' file