使用sed删除代码模式?

使用sed删除代码模式?,sed,Sed,我想使用sed删除部分代码(段落),以模式开头,以分号(;)结尾 现在我遇到了一个例子,删除了由新行分隔的段落 sed -e '/./{H;$!d;}' -e 'x;/Pattern/!d' 我不知道如何使用分号,而不是作为分隔符,而是作为一种模式。 谢谢。这可能适合您: cat <<! >file > a > b > ; > x > y > ; > ! sed '/^[^;]*$/{H;$!d};x;s/;//;/x/!d' fi

我想使用sed删除部分代码(段落),以模式开头,以分号(
)结尾

现在我遇到了一个例子,删除了由新行分隔的段落

sed -e '/./{H;$!d;}' -e 'x;/Pattern/!d' 
我不知道如何使用分号,而不是作为分隔符,而是作为一种模式。
谢谢。

这可能适合您:

cat <<! >file
> a
> b
> ;
> x
> y
> ;
> !
sed '/^[^;]*$/{H;$!d};x;s/;//;/x/!d' file  

x
y
sed '/^\s*LOG(.*);/d;/^\s*LOG(/,/);/d' file
另一种选择是使用地址范围的GNU扩展

下一个示例的意思是:删除从以pattern开头的行到以分号结尾的行的所有内容

sed '/pattern/,/;$/ d' infile

编辑以评论苛刻的内容

尝试下一步
sed
命令:

sed '/^\s*LOG\s*(.*;\s*$/ d ; /^\s*LOG/,/;\s*$/ d' infile
说明:

/^\s*LOG\s*(.*;\s*$/ d            # Delete line if begins with 'LOG' and ends with semicolon.
/^\s*LOG/,/;\s*$/ d               # Delete range of lines between one that begins with LOG and 
                                  # other that ends with semicolon.

请显示示例数据和预期结果。是的,请确保输入,您显示的代码不依赖任何GNU扩展来解决范围处理。这将适用于20多年前的原始sed;-)祝大家好运!仅当输入为单行时才有效。如果我错了,请纠正我。所以,不应该要求保持缓冲。Sample@Harsh:我添加了
sed
脚本,提供了您期望的输出。谢谢大家。我学到了一些与sed相关的新东西。(我是新来stackoverflow的,所以请原谅我的格式设置,甚至不能输入新行,所以使用了pastebin)。谢谢还有一个问题:我的目标是从文件中删除日志。现在对于长参数,它可以跨越多行(1、2、3行或更多行)。删除以LOG开头,以(第一个)分号结尾的段落(或行)。我会尝试修改它,但当它不是一个段落并且是单行时,我失败了。(为什么返回语句要特别处理!)