c++ - 更改 #include 文件名以匹配大小写

标签 c++ c sed

我有一段 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"

我想创建一个自动脚本来执行此更新。

我在下面列出了此过程的各个步骤,但我似乎无法将这些部分整合在一起。

  1. 创建所有 *.h 文件的列表,ls *.h > include.lst 。这将创建一个包含所有大小写正确的文件名的文件。
  2. 使用 include.lst 中的文件名创建一个 sed 命令 's/<filename>/<filename>/I'它执行不区分大小写的搜索并用正确大小写的文件名替换匹配项。我相信我只需要进行一次替换,但添加全局 g 将处理多次发生。
  3. 将此替换列表应用于目录中的所有文件。

我想要关于如何创建 sed 命令 2) 的建议 include.lst 。我想我可以处理剩下的事情。

最佳答案

  1. 在脚本中使用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 包含更改为小写。

  2. 然后您要更改所有文件名:

    find . -name *.h -print0 | xargs -0 rename 's/(*)/\L\1/'
    

    这会将所有头文件重命名为小写。

这仅适用于 Linux。如果您使用的是 Windows,您可能需要使用 Perl 或 Python 脚本来完成上述所有操作。

关于c++ - 更改 #include 文件名以匹配大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278391/

相关文章:

c++ - 从 MFC 和 VS2010 中的编辑控件读取文本

c++ - wglGetCurrentDC 未解析的外部

c++ - 内存分配是系统调用吗?

c - 写入多个文件会出现段错误,单个文件不会

awk - 提取文件中列值包含在列表中的行?

bash - 如何在现有txt文件中添加新行

c++ - unique_ptr 到派生类作为函数的参数,该函数将 unique_ptr 带到基类

c++ - 在 C++ 中将图像从 Pylon 转换为 Opencv

c - ubuntu中编译c程序时出现"File not found"错误

java - 使用 "vagrant up"安装 java 8 (jdk 1.8) 在 debian 上不起作用