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

使用Awk/Sed提取行中FSR开头片段的技术求助

当然可以!用 Awk 或者 Sed 都能轻松实现这个需求,而且写法相当简洁,我给你分别演示两种方案:

用 Awk 实现

Awk 的循环匹配功能可以精准捕获每行里所有以 FSR 开头的片段,逻辑清晰易懂:

awk '{
    result = ""
    # 循环匹配所有 FSR 开头的片段(假设片段由非空白字符组成,可按需调整正则)
    while (match($0, /FSR[^[:space:]]+/)) {
        # 用 | 拼接结果,避免开头或末尾出现多余分隔符
        result = result (result ? "|" : "") substr($0, RSTART, RLENGTH)
        # 截掉已经处理过的部分,继续匹配剩余内容
        $0 = substr($0, RSTART + RLENGTH)
    }
    print result
}' your_file.txt

逻辑说明:

  • match($0, /FSR[^[:space:]]+/) 会找到当前行中第一个以 FSR 开头、后续跟着非空白字符的片段
  • 每次匹配到后,将片段追加到结果字符串中,并用 | 分隔(第一次拼接时不会加多余的分隔符)
  • 截掉已处理的部分后继续循环,直到所有片段都被捕获
  • 最后打印每行的拼接结果

用 Sed 实现

如果是 GNU Sed(大部分 Linux 系统默认是这个),可以用全局替换配合简单的清理操作快速完成:

-E '
    # 全局替换:把所有非 FSR 开头的内容连同找到的 FSR 片段替换成「片段|」
    s/[^F]*(FSR[^[:space:]]+)/\1|/g
    # 去掉末尾多余的 |
    s/|$//
' your_file.txt

逻辑说明:

  • s/[^F]*(FSR[^[:space:]]+)/\1|/g 会遍历每行,跳过所有非 F 开头的内容,找到第一个 FSR 片段后替换成「片段|」,全局执行这个操作
  • 最后用 s/|$// 移除行尾多余的分隔符
  • 如果你的 Sed 不支持 -E(比如 BSD Sed),可以把正则里的括号转义成 \( 和 \)

注意事项

如果你的 FSR 片段结束条件不是「非空白字符」(比如是直到遇到逗号、分号等特定符号),只需要调整正则里的 [^[:space:]] 部分即可:

  • 比如片段直到逗号结束:/FSR[^,]+/
  • 比如片段包含字母数字下划线:/FSR\w+/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:32:59