希望这对于某人来说很快...我需要在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'
答案 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;"
这会使用find和xargs来查找子树中的所有文件,并将它们传递给perl进行处理。
注意,如果你想在正则表达式中使用/,你可以使用\
来逃避它们:
perl -p -i -e "s/\/source\/path/\/dest\/path/g;"
或使用与/
不同的分隔符作为正则表达式本身:
perl -p -i -e "s|/source/path|/dest/path|g;"
另请注意,还有其他方法可以递归地在子树上运行程序,但它们并不能正确处理带有空格或其他特殊字符的文件名。