You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文件中删除含精确匹配模式的带引号字符串

解决方案

针对你的需求,分两种常见场景给出实现方法:

场景1:每行一个带引号条目

如果file.txt里每行仅包含一个带引号的域名(比如单行就是"tntcloudid"或"vanity-tntcloud"),直接用sed删除整行即可:

sed -E '/^"tntcloudid"$|^"vanity-tntcloud"$/d' file.txt

这个命令会精确匹配整行完全等于"tntcloudid"或"vanity-tntcloud"的行并删除,不会影响"vanity-tntcloud1"这类后缀带额外字符的条目。

场景2:一行包含多个带引号条目

如果一行里有多个用逗号/空格分隔的带引号域名(比如"a.com", "tntcloudid", "vanity-tntcloud1"),需要单独删除目标条目而保留其他内容,推荐用以下sed命令:

sed -E '
  s/"tntcloudid",?\s*|,"tntcloudid"\s*|^"tntcloudid"\s*//g;
  s/"vanity-tntcloud",?\s*|,"vanity-tntcloud"\s*|^"vanity-tntcloud"\s*//g;
  s/^,\s*|\s*,//g
' file.txt

命令说明:

  1. 前两行分别处理tntcloudid和vanity-tntcloud的三种出现形式:
    • 条目在行首:^"xxx"\s*
    • 条目在行中且后跟逗号空格:"xxx",?\s*
    • 条目在行中且前跟逗号空格:,\s*"xxx"
  2. 第三行清理删除后可能遗留的行首/行尾多余逗号和空格,保证输出格式整洁。

如果觉得sed的正则逻辑繁琐,也可以用awk实现,代码可读性更强:

awk -F '[",[:space:]]+' '{
  for(i=1;i<=NF;i++){
    if($i !~ /^(tntcloudid|vanity-tntcloud)$/){
      printf "\"%s\"%s", $i, (i<NF?", ":"")
    }
  }
  print ""
}' file.txt

awk命令说明:

  • 用引号、逗号、空格作为分隔符拆分每行内容
  • 遍历所有字段,仅保留不是tntcloudid或vanity-tntcloud的条目
  • 重新将保留的条目按"域名", "域名"的格式输出

内容的提问来源于stack exchange,提问作者bessey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 20:38:07