Unix递归查找和替换?

时间:2012-04-17 01:11:21

标签: unix replace find

希望这对于某人来说很快...我需要在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)

其中FIND ='/ string / path / term' 和REPLACE ='/ string / path / newterm'

2 个答案:

答案 0 :(得分:11)

您可以使用/以外的其他字符。例如:

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

http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators

中的更多信息

答案 1 :(得分: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;"

另请注意,还有其他方法可以递归地在子树上运行程序,但它们并不能正确处理带有空格或其他特殊字符的文件名。