Regex bash排序,使结果以数字顺序和字符串顺序排列
假设我在对一个文件运行Regex bash排序,使结果以数字顺序和字符串顺序排列,regex,string,bash,compare,Regex,String,Bash,Compare,假设我在对一个文件运行sort-u之后比较了两个相邻的行。我发现它们都从左边匹配n个字符,然后在某个点开始不一致,在不一致开始的地方,第一行有一个数字“0”到“9”。第二行有一个非数字。我想让这两条线交换位置。我为什么要这个?因为第一行中的数字意味着它是一个较长的数字,并且需要排在另一行后面,因此,无论数字值如何,这些行都将从此处重新排列: xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-
sort-u
之后比较了两个相邻的行。我发现它们都从左边匹配n个字符,然后在某个点开始不一致,在不一致开始的地方,第一行有一个数字“0”到“9”。第二行有一个非数字。我想让这两条线交换位置。我为什么要这个?因为第一行中的数字意味着它是一个较长的数字,并且需要排在另一行后面,因此,无论数字值如何,这些行都将从此处重新排列:
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-xx.x.x.x
1
10
11
12
13
14
15
2
3
4
5
6
7
8
9
为此:
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-xx.x.x.x
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x
这是:
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-xx.x.x.x
1
10
11
12
13
14
15
2
3
4
5
6
7
8
9
变成这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
因为它强制使用相同位数的数值
相互比较,因为从左边分组的数字较多的数字移到数字较少的数字后面
我的逻辑可能会在某个时候崩溃,但在我编写代码之前,我无法检查返回的结果。那么,有人知道如何在bash中实现这一点吗?sort-g
(通用数字排序)应该可以做到这一点