unix 使用包含“或/”的变量进行替换

lh80um4z  于 2023-01-25  发布在  Unix
关注(0)|答案(1)|浏览(125)

我有一个包含的文件。
基础文件:

#include "File1.hpp"
#include "Rep/File2.hpp"

我想将这些包含添加到另一个文件(NEW_FILE)中。我编写了一个脚本:

grep "$BASE_FILE" - "#include" | while read -r INC
  if ! grep -q "$INC" "$NEW_FILE"
  then
    sed -i "1s/^/$INC/g" "$NEW_FILE"
  fi
done

但是我遇到了错误“错误的s选项”。我不知道我的问题是来自BASE_FILE中的“还是/。

ut6juiuv

ut6juiuv1#

我们可以避免循环和为循环中的每个匹配行运行代价高昂的grep + sed
您可以使用grep给予新文件中缺少的include行,方法是:

grep -vFf "$new_file" <(grep -F '#include' "$base_file")

一旦你得到这个差异,它是直接向前添加这些行在顶部:

{
grep -vFf "$new_file" <(grep -F '#include' "$base_file")
cat "$new_file"
} > _tmp &&
mv _tmp "$new_file"

注意,我避免使用全部大写的变量,以避免与shell中保留的环境变量发生潜在冲突。

相关问题