shell - 脚本中的 Sed 命令以查找字符串(如果存在),否则附加新字符串
问题描述
我试图在找到一个名为 xyz.txt 的文件后插入一个字符串。
这是 xyz.txt 文件:
/virtualhosts
{
"alsed-agency-starter.abc.com"
"ecaas-fr-agency-starter.abc.com"
"dvdvd-in-agency-starter.abc.com"
}
在这里,我插入了一个新字符串“geg-de-starter.abc.com”,如下所示:
/virtualhosts
{
"geg-de-starter.abc.com"
"alsed-agency-starter.abc.com"
"ecaas-fr-agency-starter.abc.com"
"dvdvd-in-agency-starter.abc.com"
}
如何使用 sed (或任何其他方式)做到这一点?
解决方案
awk -v newStr='"geg-de-starter.abc.com"' '
NR==FNR { if ( index($0,newStr) ) gotNew=1; next }
index($0,"/virtualhosts") { gotBeg=1 }
!gotNew && gotBeg && /"/ {
indent = $0
sub(/".*/,"",indent)
print indent newStr
gotBeg = 0
}
1' file file
/virtualhosts
{
"geg-de-starter.abc.com"
"alsed-agency-starter.abc.com"
"ecaas-fr-agency-starter.abc.com"
"dvdvd-in-agency-starter.abc.com"
}
推荐阅读
- java - 单元测试中的 Mongock (Mongobee) 和 Spring Boot
- python - 根据指定的索引对数据框进行排序
- php - 客户端 jQuery 文件上传(多上传)
- node.js - “EPERM:不允许操作,重命名”当使用带有会话文件存储的快速会话时
- java - 如何在 Fluentd Java API 中定义日志严重级别?
- google-cloud-platform - 在谷歌上设置 Kubernetes 以容纳多个客户的最佳方式
- javascript - Dated-fns 无法解析 ISO 日期
- javascript - 为什么字符串没有被大写字母替换
- regex - 否定正则表达式中的特定单词
- php - 如何从表名是变量的 MySQL 更新