2017-10-09 40 views
1

在bash中,如何查找並替換一些包含新行的文本?查找並替換包含新行的文本

我想完全匹配2條指定的線條(我無法單獨匹配它們,因爲兩條線分別出現在不同的地方&我只想替換兩條線連續出現的位置)。使用sed我能夠單獨找到並替換單獨的行和新的行,但不能在一起!

在如果需要的情況下,下面是該行我想查找和替換(從多個文件一次!):

} elseif ($this->aauth->is_member('Default')) { $form_data['userstat'] = $this->aauth->get_user()->id;

+0

,你要替換? –

+0

對不起,但它真的很重要嗎? –

+0

如果您使用捕獲的組進行替換,則爲;所以,祝你好運 –

回答

1

一般來說,你可以使用sed -z告訴sed使用空字符分割線。假設你有一個包含

Hello World 
This is a line 
line1 
line2 
Hello World, again 
line1 
line2 
end 

執行sed -z -e 's/line1\nline2/xxx/g' text產量

Hello World 
This is a line 
xxx 
Hello World, again 
xxx 
end 

您可以添加*(即<space><star>)來處理不定空格的文件text


在特定情況下,如果要刪除您可以使用塊語句前進到下一行並刪除第二行,如果它的第二線匹配

sed -e '/line1/{n;/line2/d}' text 
1

這可能會實現(GNU sed):

sed -i 'N;s/first line\nsecond line/replacement/;P;D' file ... 

在模式空間中保留兩行移動窗口,並在必要時進行替換。

N.B. -i選項更新文件。

而且使用範圍和改變命令:

sed -i '/first line/,/second line/c\replacement1\nreplacement2\netc' file ... 
+0

這也工作,謝謝! :) –