如何有条件地删除字符并在中间保留文本



如何使用sed或其他posix命令去除括号,但只有在我们遇到 "codeBlock":{"_id":{"varying24characters"}时才能使用。该行中的这种情况可能有多个匹配项,我想避免卸下看起来像SmoreBlock的东西上的牙套。

输入(一行(

test,"codeBlock":{"_id":{"4c9d4e1fe2c101000138eb4b"},morestuff,"smoreBlock":{"_id":{"6c9d4e1fe2c101000138eb4b"},hey,stuff,test,"codeBlock":{"_id":{"7c9d4e1fe7c101111138eb4b"},otherstuff

所需的输出

test,"codeBlock":{"_id":"4c9d4e1fe2c101000138eb4b",morestuff,"smoreBlock":{"_id":{"6c9d4e1fe2c101000138eb4b"},hey,stuff,test,"codeBlock":{"_id":"7c9d4e1fe7c101111138eb4b",otherstuff

我一直在阅读有关SED返回的脑袋,甚至无法接近我想要的东西。不幸的是,这不是作业。我可以写一个小程序来违反它,但我知道必须有一种使SED,尴尬或Perl处理此操作的方法。计划在Rhel7或CentOS7主机上运行此操作。

以另一种方式认为这是必需的且不需要的,但请以前捕获小组。因此,您只需零件即可替换整个匹配项。

sed 's/("codeBlock":{"_id":){("[0-9a-f]{24}")}/12/g' file

或,如果您有gnu sed:

sed -E 's/("codeBlock":{"_id":){("[0-9a-f]{24}")}/12/g' file

两种屈服:

test,"codeBlock":{"_id":"4c9d4e1fe2c101000138eb4b",morestuff,"smoreBlock":{"_id":{"6c9d4e1fe2c101000138eb4b"},hey,stuff,test,"codeBlock":{"_id":"7c9d4e1fe7c101111138eb4b",otherstuff

最新更新