使用sed删除代码模式?
我想使用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 -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开头,以(第一个)分号结尾的段落(或行)。我会尝试修改它,但当它不是一个段落并且是单行时,我失败了。(为什么返回语句要特别处理!)