批量替換多文件字符串問題


操作系統 : CentOS7.3.1611_x64

Python 版本 : 2.7.5

問題描述

編碼過程中有時候會遇到在多個源文件中存在同一個變量名(比如 : writeBuffer),需要替換為新的變量名(比如 : write_buffer)的問題。 怎么能方便快捷的解決該問題呢?

解決方案

使用sed

sed和grep結合使用可以替換當前文件夾多個文件的內容。

格式 :

sed -i 's/原字符串/新字符串/g' `grep  -rl 原字符串 所在目錄`

示例代碼:

sed -i 's/writeBuffer/write_buffer/g' `grep -rl writeBuffer  ./*`

使用Python

使用Python腳本可以實現替換當前文件夾多個文件的內容。

替換單個文件的代碼如下:

def doReplace(fpath,src,dst):
    newConent,bFlag = "",False
    with open(fpath,"rb") as fin:
        for line in fin :
            if line.find(src) == -1 :
                newLine = line
            else:
                bFlag = True
                newLine = line.replace(src,dst)
            newConent += newLine
    if not bFlag : return None
    print fpath
    with open(fpath,"wb") as fout:
        fout.write(newConent)
    return None

替換多個文件僅需添加目錄遍歷代碼。

完整示例代碼如下:

https://github.com/mike-zhang/pyExamples/blob/master/tools/replaceMulti.py

添加可執行權限:

chmod a+x replaceMulti.py

使用示例:

./replaceMulti.py writeBuffer write_buffer

將當前文件夾中所有 writeBuffer 替換為 write_buffer

也可以將 replaceMulti.py 放入 /usr/local/bin/ 目錄:

[root@local ~]# mv replaceMulti.py /usr/local/bin/
[root@local ~]# replaceMulti.py
usage : replaceMulti srcStr dstStr
replace current dir files
[root@local ~]#

該腳本在windows下也可以使用,將 replaceMulti.py 所在目錄加入環境變量即可。

好,就這些了,希望對你有幫助。

本文github地址:

https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180421_批量替換多文件字符串問題.rst

歡迎補充


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM