首页 > 代码库 > 头文件大小写问题的脚本解决方案
头文件大小写问题的脚本解决方案
linux的文件名是大小写敏感的,所以,我们要将代码中include的头文件大小写做个转换。
手动修改——当我没说……
用脚本去解决,之前我用perl写过这样功能的脚本,但是时间久远,我已经找不到了。
简单分析一下,大概是一下几步
- 找到所有的被包含过的头文件,grep/sort/uniq
- 对每一个头文件,如果存在,则不处理
- 如果不存在,则忽略大小写find -iname,这样会有三种不同的结果,找不到,找到一个和找到多个,将结果分别记录在不同的文件,作为输出结果
- 对于找不到的,这个可能是系统文件,也可能是因为别的原因找不到,这需要一个一个的确认
- 对于找到一个的,简单的perl替换就可以了,或者sed?我喜欢perl
- 对于找到多个的,直接等待手工确认
以上就简单处理了大部分的情况,就此打住,脚本么,简简单单的处理个七七八八就可以了。能处理的就要处理对,不能处理的就记录下来。
根据以往的经验,在一个大而复杂的系统里面,这样的结果可能会出现找到多个的很多,这样就会很麻烦,但也没办法。
一下是shell脚本,经测试,能工作。
#!/bin/bashworkdir=.modify=0while [ $# -gt 0 ]do case $1 in "--modify") modify=1 ;; "--work-dir") shift workdir=$1 ;; *) echo "USAGE: $0 [--work-dir <work-dir>] [--modify] [--help]" exit 1 esac shiftdoneecho "work-dir: $workdir, modify: $modify"h_files=$(tempfile)none_files=files_noneok_files=files_onemore_files=files_more>$none_files>$ok_files>$more_filesgrep -Prsh ‘^\s*#\s*include‘ $workdir | grep -Po ‘\w+\.h‘ | sort | uniq | while read hfiledo echo -n . if [ $(find $workdir -name "$hfile" | wc -l) -eq 0 ] then find $workdir -iname "$hfile" | grep -Po ‘\w+\.h$‘ | sort | uniq > $h_files file_cnt=$(cat $h_files | wc -l) if [ $file_cnt -eq 0 ] then echo $hfile >> $none_files elif [ $file_cnt -eq 1 ] then newfile=$(cat $h_files) echo $hfile ‘->‘ $newfile >> $ok_files # for ok, deal it if [ $modify -eq 1 ] then grep -Pril "\b$hfile\b" $workdir | xargs perl -i -pe "s/\b$hfile\b/$newfile/" fi else echo -- $hfile -- >> $more_files cat $h_files >> $more_files fi fidoneecho Done!echo the result in file: $none_files, $ok_files and $more_files
头文件大小写问题的脚本解决方案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。