2012-10-24 69 views
3

我正在尝试查找出现“MY_NAME”的整个源代码,并且想用“YOUR_NAME”替换它。我已经知道它们出现的文件和行号,并且我想为此创建一个修补程序,以便运行该修补程序的任何人都可以执行相同的操作。任何人都可以帮忙吗?用整个源代码中的另一个替换声明的一部分

+0

您是否需要使用关于行号的知识?如果您只是让它查找“MY_NAME”并将其替换为“YOU_NAME”,则该脚本的编写将会简单得多。 –

回答

2

你可以通过控制台来完成。只需使用找到来找到目标文件,然后您可以声明您想用什么语句来替换。例如:

find -name '*' | xargs perl -pi -e 's/MY_NAME/YOUR_NAME/g' 
+1

如果你使用''*''的参数,'name'是不必要的/多余的 - 只要'find | xargs ...'而不是。但是你可能想要添加'-type f',所以你只能看文件而不是目录,符号链接,套接字等等...... – twalberg

0

使用diff命令创建一个补丁文件,然后可以使用patch-command来分发和应用补丁文件。

man diff会给你很多关于这个过程的信息。

1

执行sed命令可能更容易,然后生成补丁程序。

sed -e '12s/MY_NAME/YOUR_NAME/g;32s/MY_NAME/YOUR_NAME/g' file > file2 

这将在第12行和第32行将MY_NAME替换为YOUR_NAME,并将输出保存到file2中。

您还可以生成一个sed脚本,如果有很多变化:

#!/bin/sed -f 

12s/MY_NAME/YOUR_NAME/g 
32s/MY_NAME/YOUR_NAME/g 

然后,适用于许多文件,你应该使用find

find -type f '(' -iname "*.c" -or -iname "*.h" ')' -exec "./script.sed" '{}' \; 

希望这有助于=)

+1

如果他想要替换文件中的所有事件,只需避免指定行号。 – Bakuriu

+0

什么是我想添加另一个喜欢所有被触摸的文件?因为在整个源代码中有很多文件..该脚本只适用于一个文件吗? – SinnerShanky

+0

是的。我将编辑答案也适用于许多文件。 –

相关问题