我想扫描整个文件树,并用两个匹配项对任意一行进行两次替换,即:
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
,%s
并bcm_errstr(rv)
在其中。
您可以用来find
递归获取文件,然后sed
进行内联更改。如果我正确理解您的目标,这应该可以工作:
find . -print0 | xargs -0 sed -i 's/%s/%d/g; s/bcm_errstr(rv)/rv/g;'
注意:这可能比您想要的更匹配,但列出的目标行为非常有限。您需要调整查找部分以仅针对要定位的文件进行过滤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句