You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Bash为C++源文件添加多行自定义头部内容

解决方案

原有写法使用sed的行首替换逻辑无法正确处理带换行的变量,换行符会被sed识别为命令分隔符,导致最终插入的内容变成单行。

推荐修改方案

方案1:使用sed插入命令(适配GNU sed,大部分Linux发行版默认)

变量定义不需要修改:

h=$'//Copyright 2021 My Corporation\n//Authors: me and others\n'

推荐直接用find + exec写法,避免文件名带空格、特殊字符时执行异常:

find . -name '*.h' -o -name '*.cpp' -exec sed -i "1i\\
$h" {} \;

如果要保留原来的for循环写法,注意给文件名变量加引号:

for f in $(find . -name '*.h' -or -name '*.cpp'); do
    sed -i "1i\\
$h" "$f"
done

方案2:awk实现(跨平台兼容性更好,适配macOS/BSD环境)

如果是macOS等自带BSD sed的环境,用awk实现可以避免语法差异问题:

h=$'//Copyright 2021 My Corporation\n//Authors: me and others\n'
find . -name '*.h' -o -name '*.cpp' | while read -r f; do
    tmp=$(mktemp)
    awk -v header="$h" 'NR==1{print header}1' "$f" > "$tmp" && mv "$tmp" "$f"
    rm -f "$tmp"
done

注意事项

  • macOS自带的BSD sed使用-i参数时需要额外指定备份后缀,不需要备份的话填空字符串即可,示例:sed -i '' "1i\\$h" "$f"
  • 所有文件名变量一定要加双引号,避免文件名带特殊字符时执行报错

内容的提问来源于stack exchange,提问作者Dmitriano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:30:05