2012-04-17 49 views
4

希望这对于这里的某个人来说是一个快速的...我需要在unix中递归地查找和替换一个字符串。Unix以递归方式查找和替换?

通常情况下,我使用:

perl -e "s/term/differenterm/g;" -pi $(find path/to/DIRECTORY -type f) 

但是,我需要替换的字符串包含一个斜杠,而我不知道如何逃生呢?

所以,我需要做的:

perl -e "s/FIND/REPLACE/g;" -pi $(find path/to/DIRECTORY -type f) 

哪里找到= '/字符串/路径/术语' 和REPLACE = '/字符串/路径/ newterm'

回答

1

在UNIX它去的东西像这样:

find "$path" -type f -print0|xargs -0 \ 
    perl -p -i -e "s/term/differenterm/g;" 

这使得利用findxargs找到一个子树中的所有文件,并将它们传递到perl进行处理。

注意,如果你想在你的正则表达式使用/人的,你可以逃脱他们与\

perl -p -i -e "s/\/source\/path/\/dest\/path/g;" 

,或者使用不同的分隔符比/为正则表达式本身:

perl -p -i -e "s|/source/path|/dest/path|g;" 

请注意,还有其他一些方式递归地在子树上运行程序,但它们并不全部使用空格或其他特殊字符正确处理文件名。

+1

perl -e "s|FIND|REPLACE|g;" -pi $(find path/to/DIRECTORY -type f) 

更多信息@ user1154488说_term_和_differentterm_包含斜杠所以您的解决方案并没有解决他的问题。 – 2012-04-17 01:20:20

+0

修正的答复。 – 2012-04-17 01:27:48