[英]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.