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

Bash脚本实现:匹配目标词后提取对应分段的国家名称

可行的Shell解决方案

针对你描述的文件格式,以下几种Shell工具组合可以精准提取包含目标词的分段对应的国家名称:

方法一:使用awk处理段落模式(推荐)

awk适合处理这种按特定标记分割的段落内容,逻辑清晰且效率高:

awk -v target="你要找的目标词" '
  /^Name:/ {
    # 提取当前分段的国家名称(去掉"Name: "前缀)
    current_country = substr($0, 6)
    # 重置目标词匹配标记
    match_flag = 0
  }
  # 检查当前行是否包含目标词
  $0 ~ target { match_flag = 1 }
  # 遇到下一个分段开头时,若上一段匹配到目标词则输出国家名
  /^Name:/ && prev_match { print prev_country }
  # 文件末尾处理:若最后一段匹配到目标词,输出对应国家名
  END { if (match_flag) print current_country }
  # 保存上一段的状态
  {
    prev_country = current_country
    prev_match = match_flag
  }
' your_file.txt

方法二:简化版awk写法(利用记录分隔符)

通过修改awk的记录分隔符,直接将每个分段作为一个处理单元:

awk -v RS="Name:" -v target="你要找的目标词" '
  $0 ~ target {
    # 提取分段内第一行的国家名(换行前的内容)
    print substr($1, 1, index($1, "\n") - 1)
  }
' your_file.txt

注意:文件开头的空记录会被自动忽略,因为它不包含目标词。

方法三:grep + sed组合实现

如果更熟悉grep和sed,可以用行号关联的方式实现:

# 先找到所有包含目标词的行号,再逐个查找对应分段的国家名
grep -n "你要找的目标词" your_file.txt | cut -d: -f1 | while read line_num; do
  sed -n "1,${line_num}p" your_file.txt | grep -E "^Name:" | tail -n1
done | sort -u

sort -u用于去重,避免同一个国家因多次匹配目标词被重复输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:10:05