bash - 用 sed 替换多行文本
问题描述
我正在尝试替换所有名为 pom.xml 的文件中包含 XML 的多行文本。在实践中,我需要替换此部分:
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
和:
<groupId>jakarta.enterprise</groupId>
<artifactId>jakarta.enterprise.cdi-api</artifactId>
我想出了以下 sed:
find . -name pom.xml -exec sed -i 's/\<groupId\>javax\.enterprise\<\/groupId\>
\<artifactId\>cdi-api\<\/artifactId\>/\<groupId\>jakarta\.enterprise\<\/groupId\>
\<artifactId\>jakarta\.enterprise\.cdi-api\<\/artifactId\>/g' {} +
但是,从输出中返回“命令未终止”。我对多行替换不太熟悉,你能建议任何修复或其他工具吗?谢谢
解决方案
首先-i
在没有一个文件的文件夹中进行测试。
较新版本的 GNUsed
支持该选项-z
。
find . -name pom.xml -exec \
sed -rz 's#(<groupId>javax.enterprise</groupId>\n<artifactId>)(cdi-api</artifactId>)#\1jakarta.enterprise.\2#g' {} \;
推荐阅读
- swiftui - 是否可以在 SwiftUI 中更改警报的色调?
- python - 如果灰度值在没有列表的列表中,则将所有灰度图像像素更改为白色
- php - 不需要的 PHP 数组键名截断
- oracle - 从 SP 中删除无法正常工作 - Oracle
- php - PHP 表单结果到 Dompdf PDF
- xml - 使用 XSLT,如何从输出到单个文件的多个 xml 文件中获取属性?
- javascript - 将轮播项目传递给 Map 函数
- ios - 使用 Cocoapods 时找不到 FMDB 库
- ios - 授权失败:错误域=AKAuthenticationError Code=-7026 "(null)" UserInfo={AKClientBundleID=my bundle id}
- xmlstarlet - 使用 xmlstarlet 选择多个元素