linux中批量替換文本中字符串--轉載

(一)通過vi編輯器來替換。
vi/vim 中可以使用 :s 命令來替換字符串。
:s/well/good/ 替換當前行第一個 well 爲 good
:s/well/good/g 替換當前行所有 well 爲 good
:n,$s/well/good/ 替換第 n 行開始到最後一行中每一行的第一個 well 爲 good
:n,$s/well/good/g 替換第 n 行開始到最後一行中每一行所有 well 爲 good
n 爲數字,若 n 爲 .,表示從當前行開始到最後一行
:%s/well/good/(等同於 :g/well/s//good/) 替換每一行的第一個 well 爲 good
:%s/well/good/g(等同於 :g/well/s//good/g) 替換每一行中所有 well 爲 good
可以使用 # 作爲分隔符,此時中間出現的 / 不會作爲分隔符
:s#well/#good/# 替換當前行第一個 well/ 爲 good/
:%s#/usr/bin#/bin#g 可以把文件中所有路徑/usr/bin換成/bin

(二)直接替換文件中的字符串。(此法不用打開文件即可替換字符串,而且可以批量替換多個文件。)
1.perl命令替換,參數含義如下:
-a 自動分隔模式,用空格分隔$_並保存到@F中。相當於@F = split ”。分隔符可以使用-F參數指定
-F 指定-a的分隔符,可以使用正則表達式
-e 執行指定的腳本。
-i<擴展名> 原地替換文件,並將舊文件用指定的擴展名備份。不指定擴展名則不備份。
-l 對輸入內容自動chomp,對輸出內容自動添加換行
-n 自動循環,相當於 while(<>) { 腳本; }
-p 自動循環+自動輸出,相當於 while(<>) { 腳本; print; }
用法示例:
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c
將所有C程序中的foo替換成bar,舊文件備份成.bak

perl -p -i -e "s/shan/hua/g" ./lishan.txt ./lishan.txt.bak
將當前文件夾下lishan.txt和lishan.txt.bak中的“shan”都替換爲“hua”

perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2
將每個文件中出現的數值都加一

2.sed命令下批量替換文件內容  

格式: sed -i "s/查找字段/替換字段/g" grep 查找字段 -rl 路徑 文件名

-i 表示inplace edit,就地修改文件

-r 表示搜索子目錄

-l 表示輸出匹配的文件名
s表示替換,d表示刪除

示例:sed -i "s/shan/hua/g" lishan.txt

      把當前目錄下lishan.txt裏的shan都替換爲hua

sed的其他用法如下:
轉自:http://www.cnblogs.com/nkwy2012/p/6365714.html

1、刪除行首空格
sed 's/^[ ]//g' filename
sed 's/^
//g' filename
sed 's/^[[:space:]]*//g' filename

2、行後和行前添加新行
行後:sed 's/pattern/&\n/g' filename
行前:sed 's/pattern/\n&/g' filename
&代表pattern

3、使用變量替換(使用雙引號)
sed -e "s/$var1/$var2/g" filename

4、在第一行前插入文本
sed -i '1 i\插入字符串' filename

5、在最後一行插入
sed -i '$ a\插入字符串' filename

6、在匹配行前插入
sed -i '/pattern/ i "插入字符串"' filename

7、在匹配行後插入
sed -i '/pattern/ a "插入字符串"' filename

8、刪除文本中空行和空格組成的行以及#號註釋的行
grep -v ^# filename | sed /^[[:space:]]*$/d | sed /^$/d

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章