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

如何用sed按链接中的序号排序提取含描述的条目至新文件?

解决方案:结合sed与其他工具实现条目排序

单独使用sed无法完成排序操作(sed仅擅长文本替换、行处理,不具备排序功能),但可以通过sed + sort + 其他工具的组合实现需求,具体步骤如下:

方法1:基于链接路径字段排序(适用于路径固定的场景)

假设原文件名为input.txt,目标输出文件为output.txt,执行以下命令:

sed -n 'N;s/\n/|/p' input.txt | sort -t '/' -k4,4n | sed 's/|/\n/g' > output.txt

命令分解:

  1. 合并每组条目为单行:
    sed -n 'N;s/\n/|/p' input.txt

    • N:将下一行文本读入当前处理的模式空间,把每组的「文件描述行+链接行」合并成一行
    • s/\n/|/:将换行符替换为|(选择不冲突的分隔符),得到类似文件描述|http://linktofile/33.txt的单行格式
    • -n + p:仅打印处理后的内容
  2. 按链接中的数字排序:
    sort -t '/' -k4,4n

    • -t '/':以/作为字段分隔符
    • -k4,4n:按第4个字段(即33.txt、11.txt这类文件名)的数值排序(n表示按数字大小而非字符串排序)
  3. 恢复原格式并输出:
    sed 's/|/\n/g':将分隔符|换回换行符,恢复「文件描述+链接」的两行组格式,最后重定向到目标文件


方法2:提取链接中的数字排序(适用于路径不固定的场景)

如果链接的路径结构不固定(比如路径层级变化),可以用awk精准提取链接中的数字作为排序依据:

sed -n 'N;s/\n/|/p' input.txt | awk -F'|' '{match($2, /[0-9]+/, num); print num[0] "|" $0}' | sort -n | cut -d'|' -f2- | sed 's/|/\n/g' > output.txt

命令分解:

  1. 合并条目为单行:同方法1的第一步
  2. 提取数字作为排序键:
    awk -F'|' '{match($2, /[0-9]+/, num); print num[0] "|" $0}'
    • -F'|':以|分割字段,$2代表链接部分
    • match($2, /[0-9]+/, num):匹配链接中的连续数字,存入数组num
    • 输出格式为数字|文件描述|链接,把数字放在行首作为排序依据
  3. 按数值排序:sort -n:按行首的数字大小排序
  4. 移除排序键并恢复格式:
    cut -d'|' -f2-:去掉行首的数字和分隔符,还原为文件描述|链接的单行格式
    最后用sed换回换行符,输出到目标文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:28