现在的位置: 首页 > 综合 > 正文

正则表达式使用笔记——用perl和sed批量修改配置信息

2013年12月22日 ⁄ 综合 ⁄ 共 717字 ⁄ 字号 评论关闭

测试程序时,遇到一个配置文件需要修改,该配置文件中包含信息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个或多个不为‘\’的字符,$&表示匹配串。

抱歉!评论已关闭.