gpt4 book ai didi

vim - 如何使用正则表达式在 Vim 中定义范围并按数字排序?

转载 作者:行者123 更新时间:2023-12-04 06:48:08 27 4
gpt4 key购买 nike

这篇文章分为两部分。我正在尝试对一组如下所示的 ip 语句进行排序:

ifconfig em0 alias 172.16.80.1/28
ifconfig em0 alias 172.16.180.1/32
...
ifconfig em0 alias 172.16.1.1/32

通过 ip。是否可以使用正则表达式返回范围?以下返回错误
%/172.*/sort n

这(显然)没有做任何事情:
g/172.*/sort n

这甚至可以做到吗?

现在,我直接解决了范围问题:
18,31 sort

但这是按 ASCII 顺序排序的,而不是数字排序(写 ips)。
ifconfig em0 alias 172.16.180.1/32
...
ifconfig em0 alias 172.16.80.1/28

不幸的是这个 Vim Tip提示不起作用:
18,31 sort n

事实上,它什么都不做。对原始列表进行排序保持原始顺序不变。因此,即使通过正则表达式返回一个范围是不可能的,我如何按数字对这些行进行排序?

更新
以下工作:
18,31 !sort -n -t . -k 3,3 -k 4,4

(我只需要对最后两个字节进行排序。)

最佳答案

您可以为范围的开始行指定正则表达式,并为范围的结束行指定正则表达式。如果你有这个文件:

foo
bar
ifconfig em0 alias 172.16.80.1/28
ifconfig em0 alias 172.16.55.1/28
ifconfig em0 alias 172.16.180.1/28
ifconfig em0 alias 172.16.1.1/32
baz
quux

您可以使用 IP 地址对行进行排序,如下所示:
:/172/,/baz/-1sort

这表示“从匹配 /172/ 的第一行开始,在匹配 /baz/ 的第一行上方结束一行”。根据文件的内容,您可能会想出更聪明的正则表达式。

我不知道如何一次性在 Vim 中对 IP 地址进行排序。但是,如果您可以访问 GNU sort,则可以执行以下操作(根据 this article ):
:/172/,/baz/-1!sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4

这将按数字对它们进行排序。不确定您对 IP 地址的“字典序”是什么意思。

关于 :sort:g , Vim 帮助在 :h :sort说:

Note that using ":sort" with ":global" doesn't sort the matching lines, it's quite useless.

关于vim - 如何使用正则表达式在 Vim 中定义范围并按数字排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3498768/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com