linux中批量替換文字中字串

小虎哥-技術部落格發表於2018-08-17

(一)通過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/\blocalhost\b/127.0.0.1/g' /www/web/*/*/application/database.php

將指定模糊目錄的所有database.php程式中的localhost替換成127.0.0.1,舊檔案備份成.bak

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的其他用法如下:

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

相關文章