我有一段 C/C++ 源代码,其中 #include 语句中的文件名与 *.h 文件不完全匹配。匹配正确,但不区分大小写。这是 Windows 系统中出现的源文件类型。
我想更改所有源文件,以便所有#include
语句与其引用的文件名完全匹配。
所有要更改的文件名都用引号引起来。
示例:
文件列表
File1.h
FILE2.H
file1.cpp
文件1.cpp
#include "file1.h"
#include "file2.h"
将 file1.cpp 更改为
#include "File1.h"
#include "FILE2.H"
我想创建一个自动脚本来执行此更新。
我在下面列出了此过程的各个步骤,但我似乎无法将这些部分整合在一起。
- 创建所有 *.h 文件的列表,
ls *.h > include.lst
。这将创建一个包含所有大小写正确的文件名的文件。 - 使用
include.lst
中的文件名创建一个 sed 命令's/<filename>/<filename>/I'
它执行不区分大小写的搜索并用正确大小写的文件名替换匹配项。我相信我只需要进行一次替换,但添加全局 g 将处理多次发生。 - 将此替换列表应用于目录中的所有文件。
我想要关于如何创建 sed 命令 2) 的建议 include.lst
。我想我可以处理剩下的事情。
最佳答案
在脚本中使用
sed
,或使用Perl脚本:find . -name *.c -print0 | xargs -0 sed -i.bak -e "s/\#include\s\"\([^\"]+/)\"/\#include\s\"\L\1\"/"
-i.bak
会将文件备份到original_file_name.bak
,因此您无需担心弄乱此行将 C 文件中的所有 header 包含更改为小写。
然后您要更改所有文件名:
find . -name *.h -print0 | xargs -0 rename 's/(*)/\L\1/'
这会将所有头文件重命名为小写。
这仅适用于 Linux。如果您使用的是 Windows,您可能需要使用 Perl 或 Python 脚本来完成上述所有操作。
关于c++ - 更改 #include 文件名以匹配大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278391/