整个目录的查找和替换命令问题

3

看,我有一个 jig.c 文件,在其中我有类似以下语句:

mkvFree(jig);

现在我已经使用以下命令进行查找和替换:
find /home/jeegar/jig.c -type f -exec sed -i 's/mkvFree(/mkvFree((void**)&/g' {} \;

通过这个命令,我想要输出结果为:
mkvFree((void**)&jig);

但是我得到的输出是:
mkvFree((void**)mkvFree(jig);

我的命令行有什么问题吗?

编辑:

我是从https://superuser.com/questions/324428/find-and-replace-command-for-whole-directory这里得到这个命令的。

2个回答

6

您需要转义 \& 字符:

find /home/jeegar/jig.c -type f -exec \
       sed -i 's/mkvFree(/mkvFree((void**)\&/g' {} \;
&字符会用模式匹配到的整个输入来代替。

你能告诉我这种元字符的全部名称吗?它可能会引起问题。 - Jeegar Patel
1
man sed,搜索“replacement”(或“special character”)。 - sehe

2

&是替换表达式中的元字符,表示“整个搜索字符串”。请引用它,这样它就可以工作。


你能告诉我所有这类元字符的名称吗?它们会引起什么问题? - Jeegar Patel
1
在替换中,\``、&`和换行符是特殊字符。请参阅http://www.gnu.org/software/sed/manual/sed.html#The-_0022s_0022-Command - jpalecek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接