脚本语言去除文件许可证前言
我想在我的许可证区域里,把“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"这两行,正如你所要求的。