Emacs sort-regex-fields

时间:2016-06-28 14:18:22

标签: regex string sorting emacs

我正在使用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,使用"记录" regexp为file '602036248001_4483709143001_s-[^a-zA-Z]*.ts',使用"键" regexp为[^a-zA-Z' _-]\{1,3\}.ts

但是这些似乎突出了regexp-builder中的匹配(顺便说一下,为什么它需要你用引号括起你的正则表达式"" ...?)

这似乎不起作用,我很难过。我还尝试使用排序列来标记区域和排序,这也不起作用。

1 个答案:

答案 0 :(得分:2)

我会使用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]]
    }
}