Unix递归查找和替换?

Unix递归查找和替换?,unix,replace,find,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'

希望,这将是一个快速的人在这里。。。我需要在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'

在unix中,它是这样的:

find "$path" -type f -print0|xargs -0 \
    perl -p -i -e "s/term/differenterm/g;"
这利用和查找子树中的所有文件,并将它们传递给perl进行处理

注意,如果您想在正则表达式中使用/,您可以使用
\

    perl -p -i -e "s/\/source\/path/\/dest\/path/g;"
或者对正则表达式本身使用不同于
/
的分隔符:

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

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

除了
/
之外,您还可以使用其他字符。例如:

perl -e "s|FIND|REPLACE|g;" -pi $(find path/to/DIRECTORY -type f)
@user1154488中的更多信息说,term和differentinterm包含斜杠,因此您的解决方案无法解决他的问题。