簡體   English   中英

查找並替換包含換行符的文本

[英]Find and replace text containing a new line

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

我想精確匹配指定的2行(我不能分別匹配它們,因為兩條線分別出現在不同的位置,而我只想替換兩條線連續出現的位置)。 使用sed,我能夠分別找到並替換單獨的行和新行,而不是一起找到!

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

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

通常,您可以使用sed -z告訴sed使用空字符來分割行。 假設您的文件text包含

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> )來處理不固定的空格。


在特定情況下,如果要刪除第二行,可以使用block語句前進到下一行,如果與第二行匹配,則將其刪除

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

這可能對您有用(GNU sed):

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

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

NB -i選項將文件更新到位。

還使用范圍和change命令:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM