[英]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
}; defabc };
成为
test
}; defabc }; }; def
abc }; }; def
abc }; 111
test1
test2
222 }; defabc }; 111
成为
test1
test2
222 }; defabc }; }; 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.