2月27号、3月17号、4月10号,三次考试有惊无险的顺利通过,4月17号拿驾照,但是我的学车之路才刚刚开始。
如师傅所说,考驾照和会开车是两码事,拿到驾照的不一定会开车,会开车的不一定能通过考试。开车需要的是实际经验,而不是标杆和记号。但是话说回来,经过了考试的训练,基础技能会更加的扎实,以后发生事故的可能性会大大的降低。
呵呵,总之,早点拿到驾照只有好处,没有坏处。
2009年4月10日
2009年4月1日
用正则表达式修改代码
需求:将代码目录下所有文件的关于动态数组的返回参数修改为如下的形式:
原文: struct abc *var[],
替换: struct abc **var,
我用如下的脚本实现的这个功能,主要用到了find、sed 和正则表达式
1.查找
正则表达式:\s\*\s*\([a-zA-Z0-9_]*\)\[\]
这个正则表达式并不是十分的准确,只是在这个需求下工作的还行。
说明:
\s 匹配任意空白字符
\* 匹配一个*号
[a-zA-Z0-9_]* 匹配函数名(这个是不太准确的)
\[\] 匹配[]
\(xxxx\) 匹配xxxx并命名,使得xxxx部分能够被引用(xxxx为正则表达式)
2.替换
表达式:" **\1" (前面是个空格)
说明:
\1 引用正则表达式中的\(xxxx\)部分
3.sed
sed -e 's/old/new/g' < $OldFile > $NewFIle
说明:
将OldFile文件中的old串替换为new串,写入NewFile文件中
4.find
find $DIR -type f -name '*.[ch]'
说明:
查找DIR目录下的所有源文件(.c .h)文件 忽略目录、二进制文件、CVS文件、Makefile等文件
下面是脚本的内容:
_____________________这是分割线___________________
#!/bin/sh
# Desciption:
# Replace: struct abc *var[],
# to : struct abc **var,
#
# Written by Zhao Wenlu, 2009-03-30
# Source Directory
DIR=$1
# All source files
FILES=$(find $DIR -type f -name '*.[ch]')
# process each file
for FILE in $FILES;
do
# Replace: struct abc *var[],
# to : struct abc **var,
sed -e 's/\s\*\s*\([a-zA-Z0-9_]*\)\[\]/ **\1/g' < $FILE > $FILE.replace
# move replaced file to temp directory
mkdir -p $(dirname tmp/$FILE)
mv $FILE.replace tmp/$FILE
done
# rename temp to final directory
mv tmp/$DIR $DIR-replace
# have a cup of coffee!
exit 0# Desciption:
# Replace: struct abc *var[],
# to : struct abc **var,
#
# Written by Zhao Wenlu, 2009-03-30
# Source Directory
DIR=$1
# All source files
FILES=$(find $DIR -type f -name '*.[ch]')
# process each file
for FILE in $FILES;
do
# Replace: struct abc *var[],
# to : struct abc **var,
sed -e 's/\s\*\s*\([a-zA-Z0-9_]*\)\[\]/ **\1/g' < $FILE > $FILE.replace
# move replaced file to temp directory
mkdir -p $(dirname tmp/$FILE)
mv $FILE.replace tmp/$FILE
done
# rename temp to final directory
mv tmp/$DIR $DIR-replace
# have a cup of coffee!
_____________________这是分割线___________________
PS: 请问怎么把代码高亮搞的更好看一些?
订阅:
博文 (Atom)
