4

希望这对这里的某人来说是一个快速的...我需要在 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'

4

2 回答 2

11

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

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

http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators中的更多信息

于 2012-04-17T01:18:17.807 回答
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;"

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

于 2012-04-17T01:17:36.707 回答