You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何用ed工具合并文件中重复分类的文本块

用ed合并重复分类的方法

针对你给出的示例文件,要合并重复的type: food分类,可以用以下ed命令序列来实现:

分步执行(交互式编辑)

打开文件进入ed:

ed your_file.txt

然后依次输入以下命令:

  1. 定位到第一个type: food行:
    /^type: food$/
    
  2. 跳转到该分类块的最后一行(空行的前一行),并标记这个位置为a
    /^$/-1
    ka
    
  3. 定位到第二个type: food行(//表示重复上一次的搜索):
    //
    
  4. 选中第二个分类下的所有条目(从当前行的下一行到空行前一行),并移动到标记a的下一行:
    +1,/^$/-1m'a+1
    
  5. 删除多余的第二个type: food标题行和后面的空行:
    //
    d
    /^$/
    d
    
  6. 保存修改:
    w
    
  7. 退出ed:
    q
    

非交互式批量执行

如果想一次性完成,可以用here-doc方式执行:

ed -s your_file.txt <<'EOF'
/^type: food$/
/^$/-1
ka
//
+1,/^$/-1m'a+1
//
d
/^$/
d
w
EOF

为什么你的原命令不生效?

你之前的命令/^type: food$/n.,/^$/-1m/^type: food$/n是把第一个分类块的内容移动到第一个分类标题行,完全搞反了操作对象。核心问题是没区分开两个重复的分类块,也没定位到正确的目标位置。要记住:ed的m命令是把选中的内容移动到指定行的后面,所以必须先选中第二个分类的条目,再指定第一个分类块末尾作为目标位置。

如果要处理多个重复的分类,你可以先通过g/^type:/p列出所有分类,用sort | uniq -D找出重复项,再对每个重复分类执行上述命令逻辑。

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

火山引擎 最新活动