我想使用sed删除以模式开头并以分号(;
)结尾的部分代码(段落)。
现在我遇到了一个删除由新行分隔的段落
的示例sed -e '/./{H;$!d;}' -e 'x;/Pattern/!d'
我很困惑如何使用分号而不是分隔符而是作为模式。 感谢。
答案 0 :(得分:2)
其他选项是使用地址范围的GNU扩展名。
下一个示例意味着:从以 pattern 开头的行中删除所有内容,直到以分号结尾的行。
sed '/pattern/,/;$/ d' infile
编辑评论Harsh :
尝试下一个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.
答案 1 :(得分:1)
这可能对您有用:
cat <<! >file
> a
> b
> ;
> x
> y
> ;
> !
sed '/^[^;]*$/{H;$!d};x;s/;//;/x/!d' file
x
y
说明:
;
/^[^;]*$/
{H;$!d}
/^$/
或该文件的最后一行:
x
;
s/;//
x
),如果未找到,请删除PS /x/!d
N.B。这会找到任何模式/x/
来查找开头模式使用/^x/
。
编辑:
在看过您的数据和预期结果后,这可能对您有用:
sed '/^\s*LOG(.*);/d;/^\s*LOG(/,/);/d' file