2012-04-17 48 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