我想对文件中的行进行排序,这样我就可以根据字母顺序进行排序"仅";在一行中出现数字之前的最后一个字母上。这些数字只会显示在字符串的中间。数字或字母的数量没有限制。
示例:
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删除所有空格