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