希望按数字前的最后一个字母对服务器列表进行排序



我想对文件中的行进行排序,这样我就可以根据字母顺序进行排序"仅";在一行中出现数字之前的最后一个字母上。这些数字只会显示在字符串的中间。数字或字母的数量没有限制。

示例:

abcdef123ghi
abcd456efghijklm
ab24578cdef

我预计这3条线路的输出如下:

ab24578cdef #(alphabetically based on the "b")
abcd456efghijklm #(alphabetically based on the "d")
abcdef123ghi #(alphabetically based on the "f")

谢谢你的帮助!!!

施瓦茨变换:

paste <(grep -oP 'D(?=d)' file) file | sort -k1,1 | cut -f2-

另一个只扫描文件一次的。

$ sed -E 's/(.*([^0-9])[0-9].*)/2t1/' file | sort | cut -f2-
ab24578cdef
abcd456efghijklm
abcdef123ghi

我很困惑:数字在字母表中先于字母,所以一个简单的"排序";应该做到这一点。想象一下,提到的都放在一个文件中,让我们说"文件.txt";,那么以下命令应该可以解决您的问题:

cat file.txt | sort

一点幻想:

$ cat test
abcdef123ghi
abcd456efghijklm
ab24578cdef
sed -E 's@^(.*)([^0-9])([0-9].*)$@1 2 3@g' test |  sort -k 2 | sed 's@ @@g'

结果:

ab24578cdef
abcd456efghijklm
abcdef123ghi

Sed-regex使用空格将字符串分成三块:

1: from begin to not numeric value
2: single not numeric value followed by a number
3: all until end

按第二列排序

Sed删除所有空格

最新更新