使用sed在单行上进行多次替换

标准

我想扫描整个文件树,并用两个匹配项对任意一行进行两次替换,即:

printf("Hello WORLD! %s, %d\n",bcm_errstr(rv),var);
dprintf("kjhgjkhfkhgfjgd %s\n",bcm_errstr(rv));

应该成为

printf("Hello WORLD! %d, %d\n",rv,var);
dprintf("kjhgjkhfkhgfjgd %d\n"rv);

我尝试了以下操作而没有成功(这sed.c是我的测试文件,其中包含与查询匹配的两行):p$ grep printf | grep "%s" | grep -rl bcm_errmsg\(rv\) sed.c | xargs sed -i -e 's/%s/%d/' -e 's/bcm_errstr\(rv\)/rv/'

之所以grep代替,是find因为文件名未知,但是我正在查看文件内容。

内容sed.c

 $ cat sed.c  printf("kjhlkjhlkjh%dkjhgljhglj\n",bcm_errmsg(rv)); 
 dprintf("HELLO WORLD %d %d\n",test,bcm_errmsg(rv));

即我想这两个应用sed的替代品只用线条printf%sbcm_errstr(rv)在其中。

用户名

您可以用来find递归获取文件,然后sed进行内联更改。如果我正确理解您的目标,这应该可以工作:

find . -print0 | xargs -0 sed -i 's/%s/%d/g; s/bcm_errstr(rv)/rv/g;'

注意:这可能比您想要的更匹配,但列出的目标行为非常有限。您需要调整查找部分以仅针对要定位的文件进行过滤。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章