我想删除一对“}”之间的所有文字其中包含特定关键字。 我想要的是
输入:
}; text text KEYWORD text text };
输出:
}; };
建议我一个简单的正则表达式。我知道'sed'将被使用。
答案 0 :(得分:2)
\};[^}]*KEYWORD[^}]*\};
如果两个分隔符之间没有}
,则将起作用。
所以:
sed 's/\};[^}]*KEYWORD[^}]*\};/}; };/g' file.in > file.out
答案 1 :(得分:2)
这应该在大多数情况下都有效:
sed '/};[^}]*};/{s/};[^}]*};/}; };/;b};/};/!b;:a;N;/\n[^}]*};/!ba;s/[^;]*\n.*\n[^}]*/ /' inputfile
可能会出现一些失败的极端情况。如果希望结果位于两行,请将末尾附近的空间更改为\n
。
示例:
}; test ;}
变为}; };
};
变为
test
};}; };
abc };
变为
test
}; defabc }; }; def
abc }; 111
变为
test1
test2
222 }; defabc }; }; def
答案 2 :(得分:0)
以下正则表达式将匹配您要删除的内容 -
(?<=\};).*?KEYWORD.*?(?=\};)
编辑:这不会像@Tim所指出的那样与sed一起工作,因为sed不支持外观。
答案 3 :(得分:0)
最简单的方法:
cat file.in | sed "/KEYWORD/s/};[^}]*};/}; };/g" > file.out