gpt4 book ai didi

linux - 替换每个文件中的许可证通知

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:13 26 4
gpt4 key购买 nike

我想在一个相对较大的项目的每个文件的顶部替换一个多行许可通知(从 GNU GPLApache 2.0)。许可证通知由几段组成。另一个要求是目标许可证通知中有一个占位符取决于当前文件名,因此简单的查找和替换是不够的。

我熟悉做:

find . -name "*.java" -exec sed -i 's/find/replace/g' {} \;

但我看不出如何让它适用于这个用例。

更新:

目标 Apache 2.0 许可证的占位符如下所示:

Copyright [yyyy] [name of copyright owner]
[filename.java] <br/><br/>

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at<br/><br/>

http://www.apache.org/licenses/LICENSE-2.0<br/><br/>

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

最佳答案

使用以下 sed 命令删除从 start_patternend_pattern 结束的行:

sed -n '/start_pattern/{:a;N;/end_pattern/!ba;N;s/.*\n//};p' file

例如,要删除 GNU GPL 许可证,您可以使用:

sed -n '/GNU GENERAL PUBLIC LICENSE/{:a;N;/why-not-lgpl.html\>./!ba;N;s/.*\n//};p' file

要在多个文件上运行它,使用 findxargs:

find . -name "*.java" -print0 | xargs -0 sed -i -n '/GNU GENERAL PUBLIC LICENSE/{:a;N;/why-not-lgpl.html\>./!ba;N;s/.*\n//};p'

关于linux - 替换每个文件中的许可证通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911240/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com