如何使用sed通过正则表达式对行进行排序

时间:2017-04-08 12:44:25

标签: regex bash awk sed

我正在尝试使用sed匹配第2列(结束TLD)中的正则表达式对文件中的行进行排序。

这是一个示例文件:

server7, server.com,someval
server6, server.com, someval
server4, server.uk, someval
server2, server.com, someval
server10, server.us, someval
server7, server.uk, someval
server10, server.uk, someval
server10, server.us, someval

我试过了:

sed -r "s/(.*\.com.*)|(.*\.uk.*)|(.*\.us.*)/\3\2\1/g" file

但是,它会重现相同的输出,不做任何更改。

我希望我的文件排序如下:

server7, server.com,someval
server6, server.com, someval
server2, server.com, someval
server10, server.us, someval
server7, server.uk, someval
server10, server.uk, someval
server10, server.us, someval
server10, server.us, someval

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

如果您可以使用.作为字段分隔符,则可以对文件进行排序,例如:

sort -t. -k2,2 file

以上(当然)需要在行中具有相同数量的.点(至少在前2列中)。

正如@ mklement0在编辑中所说:使用-k2,2代替普通-k2更好,因为:

  

它更清晰(更强大,更有效)限制排序到   感兴趣的领域 - 如果你没有指定一个结束字段,一切   到行尾已排序