Bash 查找并替换包含新行的文本

Bash 查找并替换包含新行的文本,bash,awk,sed,Bash,Awk,Sed,在bash中,如何查找和替换包含新行的文本 我想精确匹配指定的两行(我不能单独匹配它们,因为两行分别出现在不同的位置&我只想替换两行连续出现的位置)。使用sed,我能够分别查找和替换单独的行和新行,但不能一起查找和替换 如果需要,下面是我要查找和替换的行(一次从多个文件中删除!): }elseif($this->aauth->is_成员('Default')){ $form_data['userstat']=$this->aauth->get_user()->id;通常,您可以使用sed-z来告

在bash中,如何查找和替换包含新行的文本

我想精确匹配指定的两行(我不能单独匹配它们,因为两行分别出现在不同的位置&我只想替换两行连续出现的位置)。使用sed,我能够分别查找和替换单独的行和新行,但不能一起查找和替换

如果需要,下面是我要查找和替换的行(一次从多个文件中删除!):

}elseif($this->aauth->is_成员('Default')){

$form_data['userstat']=$this->aauth->get_user()->id;

通常,您可以使用
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'文本

Hello World
This is a line
xxx
Hello World, again
xxx
end
您可以添加
*
(即
)来处理不稳定的空格


在您的特定情况下,如果要删除第二行,可以使用block语句前进到下一行,并在与第二行匹配时删除它

sed -e '/line1/{n;/line2/d}' text
这可能适用于您(GNU-sed):

在图案空间中保留两行的移动窗口,必要时进行更换

注意-i选项将文件更新到位

还可以使用范围和更改命令:

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

你想替换为?抱歉,但这真的很重要吗?如果你用捕获的组替换,是的;所以,好luckI不知道这意味着什么。但我真正需要的是删除第二行,无论这两行同时出现在哪里。尽管有这种特殊情况,我想知道如何在gene中找到并替换多行拉尔,谢谢。
sed -i '/first line/,/second line/c\replacement1\nreplacement2\netc' file ...