繁体   English   中英

正则表达式,多行

[英]regular expression, multiline

我想删除一对“}”之间的所有文本。 其中包含特定关键字。 我想要的是

输入:

}; text text KEYWORD text text };

输出:

};   };

建议我一个简单的正则表达式。 我知道'sed'是用的。

\};[^}]*KEYWORD[^}]*\};

如果两个分隔符之间没有} ,则会起作用。

所以:

sed 's/\};[^}]*KEYWORD[^}]*\};/}; };/g' file.in > file.out

这应该在大多数条件下工作:

sed '/};[^}]*};/{s/};[^}]*};/}; };/;b};/};/!b;:a;N;/\n[^}]*};/!ba;s/[^;]*\n.*\n[^}]*/ /' inputfile

可能会出现一些失败的极端情况。 如果希望结果位于两行,请将末尾附近的空间更改为\\n

例子:

}; test ;} }; test ;}变成}; }; }; };

};
test
};
变得}; }; }; };

abc };
test
}; def
abc };
test
}; def
成为abc }; }; def
abc }; }; def

abc }; 111
test1
test2
222 }; def
abc }; 111
test1
test2
222 }; def
成为abc }; }; def
abc }; }; def

正则表达式将匹配您要删除的内容 -

(?<=\};).*?KEYWORD.*?(?=\};)

编辑:这不会像@Tim所指出的那样与sed一起使用,因为sed不支持lookarounds。

最简单的方法:

cat file.in | sed "/KEYWORD/s/};[^}]*};/}; };/g" > file.out

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM