脚本语言去除文件许可证前言

0 投票
7 回答
675 浏览
提问于 2025-04-17 07:53

我想在我的许可证区域里,把“blah blah blah”这个内容递归地替换成空,也就是删除掉它:

#region License
blah blah blah
blah blah blah
#endregion

应该被替换成

#region License
#endregion

这个操作需要在某个文件夹下的所有.cs文件中都进行(递归地)。我试过用sed来做,但因为我在Windows上,所以遇到了行结束符的问题。我该如何用perl(或者python),或者其他Windows本地的工具来实现呢?

补充:这是我找到的解决方案,感谢大家的帮助!:

#/bin/bash
list=`find . -name '*.cs' -o -name '*.h' -o -name '*.cpp'` 
for i in $list 
do
perl -i~ -ne 'if (/#region License/../#endregion/) {print if /#(?:end)?  region/;next};print' $i 
done

7 个回答

1

使用 vim -e 可能是个不错的选择。

echo -e 'g/^#region License$/+1,/^#endregion$/-1d\nx' | ex program.cs

  • g/.../+1,/.../-1 => 找到两个正则表达式之间的行(+1 表示下面一行,-1 表示上面一行)
  • d => 删除
  • \n => 回车
  • x => 保存并退出

在Windows系统中,请使用:

vim -c "g/^#region License/+1,/^#endregion/-1d" +x program.cs
6

像这样吗?

perl -i~ -pe 'undef $_ if /^#region License$/ .. /^#endregion$/'
1
perl -ne 'if (/#region/../#endregion/) {print if /#(?:end)?region/;next};print' file

...这样就会在输出中保留"#region license"和"#endregion"这两行,正如你所要求的。

撰写回答