方法有二:
(一)通過vi編輯器來替換。
參考博文:
http://www.linuxdiyf.com/viewarticle.php?id=99843
http://kingaragorn.javaeye.com/blog/467308
vi/vim 中可以使用 :s 命令來替換字符串。以前只會使用編輯軟件進(jìn)行替換,今天發(fā)現(xiàn)該命令有很多種寫法(vi 真是強(qiáng)大啊,還有很多需要學(xué)習(xí)),記錄幾種在此,方便以后查詢。
:s/well/good/ 替換當(dāng)前行第一個 well 為 good
:s/well/good/g 替換當(dāng)前行所有 well 為 good
:n,$s/well/good/ 替換第 n 行開始到最后一行中每一行的第一個 well 為 good
:n,$s/well/good/g 替換第 n 行開始到最后一行中每一行所有 well 為 good
n 為數(shù)字,若 n 為 .,表示從當(dāng)前行開始到最后一行
:%s/well/good/(等同于 :g/well/s//good/) 替換每一行的第一個 well 為 good
:%s/well/good/g(等同于 :g/well/s//good/g) 替換每一行中所有 well 為 good
可以使用 # 作為分隔符,此時中間出現(xiàn)的 / 不會作為分隔符
:s#well/#good/# 替換當(dāng)前行第一個 well/ 為 good/
:%s#/usr/bin#/bin#g
可以把文件中所有路徑/usr/bin換成/bin
(二)Sumly法直接替換文件中的字符串。(此法不用打開文件即可替換字符串,而且可以批量替換多個文件。)
參考博文:http://easytech.javaeye.com/blog/316948
例1
執(zhí)行命令:
perl -p -i -e "s/China/Sumly/g" /www/*.htm /www/*.txt
上面的意思是說將www文件夾下所有的htm和txt文件中的“China”都替換為“Sumly”
例2
執(zhí)行命令:
perl -p -i -e "s/memory_production/memory_production2/g" ./*.sql
上面的意思是將當(dāng)前目錄下所有的sql文件中的“memory_production”替換成“memory_production2”
======================================linux下批量替換文件內(nèi)容 1、網(wǎng)絡(luò)上現(xiàn)成的資料
格式: sed -i "s/查找字段/替換字段/g" `grep 查找字段 -rl 路徑`
Svn中文網(wǎng)
linux sed 批量替換多個文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替換/home下所有文件中的www.admin99.net為admin99.net Bbs.Svn8.Com
sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`
exp:sed -i "s/shabi/$/g" `grep shabi -rl ./` Svn8.Com
2、自己額外附加 Svn8.Com
2.1 將文件1.txt內(nèi)的文字“garden”替換成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很簡單
2.2 將當(dāng)前目錄下的所有文件內(nèi)的“garden”替換成“mirGarden”
## sed -i "s/garden/mirGarden/g" `ls` //其實(shí)也就是ls出多個文件名而已*26.3* 改動多個文件
假定你有個變量名為 "x_cnt" 而你要把他改為 "x_counter"。
這個變量在多個 C 文件都被用到了。你需要在所有文件中作此改動。你得這么做。
把所有相關(guān)文件放進(jìn)參數(shù)列表::args *.c
這個命令會找到所有的 C 文件并編輯其中的第一個。
現(xiàn)在你可以對所有這些文件執(zhí)行置換命令::argdo %s/\
<x_cnt\>
/x_counter/ge | update
命令 ":argdo" 把另一個命令當(dāng)作其參數(shù)。而后者將對參數(shù)列表內(nèi)所有的文件執(zhí)行。
作為參數(shù)的替換命令 "%s" 作用于所有文本行。它用 "\<x_cnt\>
" 來查找"x_cnt"。
"\<" 和 "\>
" 用來指定僅匹配那些完整的詞,而不是 "px_cnt" 或"x_cnt2"。
替換命令的標(biāo)記中包含 "g",用以置換同一行文本內(nèi)出現(xiàn)的所有的匹配詞 "x_cnt"。
標(biāo)記 "e" 用于避免因文件中找不到 "x_cnt" 而出現(xiàn)錯誤信息。
否則 ":argdo" 命令就會在遇到第一個找不到 "x_cnt" 的文件時中斷。
字符 "|" 分隔兩條命令。后面的 "update" 命令將那些有改動的文件存盤。
如果沒有 "x_cnt" 被改成 "x_counter",這個命令什么也不做。
還有一個 ":windo" 命令,用于在所有視窗內(nèi)執(zhí)行其參數(shù)所規(guī)定的命令。
以及 ":bufdo"命令,對所有緩沖執(zhí)行其參數(shù)所規(guī)定的命令。
使用中要小心,因?yàn)槟阍诰彌_列表中的文件數(shù)量可能超過你能想像的。
請用 ":buffers" 命令 (或 ":ls") 來檢查緩沖列表。
2. perl方法
可以在命令行下進(jìn)行替換,
仍然以vi方法中的例子進(jìn)行講解,把c文件中的"x_cnt" 改為 "x_counter"。
可以執(zhí)行以下命令:find . -name '*.c' -print0 | xargs -0 perl -pi -e 's/x_cnt/x_counter/g'
xargs 把find命令的結(jié)果作為perl的參數(shù)。
find的參數(shù)-print0和xargs的參數(shù)-0是防止文件名中有空格或新行造成錯誤,可以man xargs獲得幫助。
注意: 如果替換的字符包括 ()[]/"'!?
等等這樣的特殊字符,你必須在字符前加上反斜杠\ 。
這種方法的好處是不用啟動編輯器,比較迅速。缺點(diǎn)是容易出現(xiàn)不想要的替換,例如:把px_cnt替換成了px_counter。
3. sed