【问题标题】:Emacs sort-regex-fieldsEmacs 排序正则表达式字段
【发布时间】:2016-10-30 22:20:38
【问题描述】:

我正在使用 emacs 24.5 并尝试像这样对文件进行排序: 乍一看,它似乎是按顺序排列的,但只是从“从左到右”的数字顺序,即顺序是s-199 然后是s2

file '602036248001_4483709143001_s-1.ts'
file '602036248001_4483709143001_s-10.ts'
file '602036248001_4483709143001_s-100.ts'
file '602036248001_4483709143001_s-101.ts'
file '602036248001_4483709143001_s-102.ts'
file '602036248001_4483709143001_s-103.ts'
file '602036248001_4483709143001_s-104.ts'
file '602036248001_4483709143001_s-105.ts'
file '602036248001_4483709143001_s-106.ts'
file '602036248001_4483709143001_s-107.ts'
file '602036248001_4483709143001_s-108.ts'

我尝试在 emacs 中使用 sort-regexp-fields,“记录”正则表达式为 file '602036248001_4483709143001_s-[^a-zA-Z]*.ts',“键”正则表达式为 [^a-zA-Z' _-]\{1,3\}.ts

但这些似乎突出了 regexp-builder 中的匹配项(顺便说一句,为什么它需要您将正则表达式括在引号 " "...?)

这似乎不起作用,我很难过。我还尝试使用 sort-columns 标记区域并进行排序,但也没有用。

【问题讨论】:

  • sort-regexp-fields 不起作用,因为它只能按字典顺序排序,而不能按数字排序。但是,sort-numeric-fields 不起作用,因为它假定字段由空格分隔。 sort-columns 也不起作用;它假定所有字段的长度都相同并且它按字典顺序排序。
  • 也许你想看看sort-numeric-fields

标签: regex string sorting emacs


【解决方案1】:

我会为此使用 awk,而不是 Emacs。尝试类似

awk -f sort.awk your-file.txt

sort.awk 在哪里:

BEGIN {
    FS = "[-.]"
}
{
    key[NR] = $2+0
    line[$2+0] = $0
}
END {
    asort(key)
    for (i = 1; i <= NR; i++) {
        print line[key[i]]
    }
}

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-29
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多