Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex bash排序,使结果以数字顺序和字符串顺序排列_Regex_String_Bash_Compare - Fatal编程技术网

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
(通用数字排序)应该可以做到这一点