regex - Emacs 排序正则表达式字段

标签 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,“记录”正则表达式为 file '602036248001_4483709143001_s-[^a-zA-Z]*.ts' 并将“key”正则表达式设置为 [^a-zA-Z' _-]\{1,3\}.ts

但是这些似乎突出显示了 regexp-builder 中的匹配项(顺便说一句,为什么它要求您将正则表达式用引号“”括起来......?)

这似乎不起作用,我很困惑。我还尝试使用排序列来标记区域并排序,但这也不起作用。

最佳答案

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

关于regex - Emacs 排序正则表达式字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38078751/

相关文章:

string - 如何处理字符串中的特殊字符

c++ - 在C++ 20中按长度排序std::vector <std::string>的代码是否正确?

regex - Dreamweaver 用正则表达式替换

python - Python 中的正则表达式

java - 如何在 Java Android Studio 中使用 String 资源?

c - 在 C 的嵌套循环中使用 strtok()?

c# - 如何保存datagridview的排序阶段通知c#

algorithm - 以尽可能少的比较对元素进行排序

Java正则表达式查找双引号

c++ - 使用 boost 正则表达式库有什么问题?