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

如何修改sed命令提取指定行首尾n字符并合并输出

需求与问题描述

我目录下有多个结构相似的文件,内容结构示例如下:

....
....
pattern one
some information Important-1
....
....
pattern two
line1
line2
line3
line4
line5
Important-2 some information
....
....

我需要从文件特定行中提取带Important的信息。目前使用以下命令提取目标行:

sed -n '/pattern two/{ n; n; n; n; n; p };  /pattern one/{n; p }' * > output.txt

得到的输出为:

some information Important-1
Important-2 some information

现在需要修改命令,实现以下效果:

  1. 保留第一行末尾的n个字符(即Important-1)
  2. 保留第二行开头的n个字符(即Important-2)
  3. 将两部分内容合并为一行,格式如下:
Important-1     Important-2

请问最优的实现方式是什么?


最优实现方案

推荐直接使用awk一站式处理,无需额外管道调用,效率更高且逻辑清晰。假设需要提取的字符数n=11(对应Important-1/Important-2的长度),命令如下:

n=11
awk -v len="$n" '
/pattern one/ {
    getline; 
    imp1 = substr($0, length($0) - len + 1, len)
}
/pattern two/ {
    for(i=1; i<=5; i++) getline; 
    imp2 = substr($0, 1, len); 
    print imp1 "\t" imp2
}
' * > output.txt

命令解释:

  • -v len="$n":将外部变量n传递给awk,方便调整提取的字符长度
  • 匹配pattern one时:读取下一行目标行,用substr提取该行末尾len个字符,存入变量imp1
  • 匹配pattern two时:连续读取5行(跳过line1到line5),读取目标行后用substr提取开头len个字符,存入变量imp2,最后打印imp1和imp2,用制表符分隔

预期输出:

Important-1     Important-2

如果需要调整提取的字符数,只需修改n的值即可,灵活性强。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:20:08