天天看點

正規表達式使用筆記——用perl和sed批量修改配置資訊

測試程式時,遇到一個配置檔案需要修改,該配置檔案中包含資訊200多條,手動修改不知道要改到何年何月,是以自然而然地想到寫個腳本來處理這些事情。

關于sed可參考:http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/sed.htm。或者直接問man也行。

1、将所有-w:*** -h:***改成-w:0 -h:0(其中***全部是數字)

本來想用perl寫腳本,突然想到sed 一條指令即可解決,如下:

sed -i 's/-w:[0-9]* -h:[0-9]*/-w:0 -h:0/g' file1.cfg
           

很簡單的正規表達式,無需多解釋了。

2、去掉中間路徑,如類似/mydir/xxx/xxxx/file.txt,去掉所有的xxx

sed -i 's/output.*\\\(.*\.txt\)/output\\\1/g' file1.cfg
           

模式比對串:

output.*\\\(.*\.txt\),前兩個\\代表一個'\'字元,第三個\和(一起組成一個'(',第四個\是'.'的控制字元,第五個是)的控制字元;

也就是說,系統看到的實際上是:output.*\(.*.txt)。

前面兩個'.'比對空格外所有字元,最後一個就純粹是檔案名擴充名前的點了。

目标串:

前兩個\\代表一個'\'字元,第三個與1組成一個'\1',用來捕獲模式串中()中的内容

這樣即隻保留最後一個'\'和'.txt'之間的内容,即檔案名,而把中間的路徑全部去掉了。

3、從完整目錄名中提取檔案名

這個是用perl實作的,如下:

if (/\\[^\\]+\.txt/)
        {   
                $temp = $&; 
        }
           

正規表達式中的[^\\]+表示包含1個或多個不為‘\’的字元,$&表示比對串。