首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerShell切割成两半

PowerShell切割成两半
EN

Stack Overflow用户
提问于 2019-03-12 11:43:59
回答 2查看 611关注 0票数 2

我有由相同的部分组成的行,我想从其中删除一半;例如,'AbcAbc'应该变成'Abc'

数据看起来总是这样:

代码语言:javascript
复制
10.22.20.106/tcp/8010.22.20.106/tcp/80
10.22.20.46/tcp/44310.22.20.46/tcp/443
10.22.20.90/tcp/44310.22.20.90/tcp/443
10.22.20.90/tcp/8010.22.20.90/tcp/80
10.22.20.89/tcp/44310.22.20.89/tcp/443
10.22.20.89/tcp/8010.22.20.89/tcp/80
10.22.20.29/tcp/44310.22.20.29/tcp/443
10.22.20.29/tcp/8010.22.20.29/tcp/80
10.22.20.122/tcp/44310.22.20.122/tcp/443
10.22.20.123/tcp/44310.22.20.123/tcp/443
10.22.20.79/tcp/44310.22.20.79/tcp/443
10.22.20.79/tcp/8010.22.20.79/tcp/80
10.22.20.78/tcp/44310.22.20.78/tcp/443
10.22.20.78/tcp/8010.22.20.78/tcp/80
10.22.20.74/tcp/44310.22.20.74/tcp/443
10.22.20.74/tcp/8010.22.20.74/tcp/80
10.22.20.22/tcp/44310.22.20.22/tcp/443
10.22.20.22/tcp/8010.22.20.22/tcp/80
10.22.20.99/tcp/44310.22.20.99/tcp/443
10.22.20.99/tcp/8010.22.20.99/tcp/80
10.22.20.54/tcp/44310.22.20.54/tcp/443
10.22.20.54/tcp/8010.22.20.54/tcp/80

我计算字符串中的字符数,然后将其减半,但不确定如何使用计算出的(减半)字符数来剪切原始字符串。

代码语言:javascript
复制
$vip_ip = $vip_line.("Virtual IP Address/Protocol/Port")
$half_string = $vip_ip.length /2

$vip_ip.length 44

$half_string 22

代码语言:javascript
复制
$vip_cut = $vip_ip.(0,-$halfstring)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-12 11:56:03

您正在尝试收集字符串方法"".SubString()所需的信息。

在你的情况下,你只需要这样的东西:

代码语言:javascript
复制
$vip_ip.substring(0,$halfstring)

从一开始就走到一半。也可以从半途而废开始,因为答案是一样的。SubString()支持这两种重载。

代码语言:javascript
复制
$vip_ip.substring($halfstring)
票数 2
EN

Stack Overflow用户

发布于 2019-03-12 12:56:09

Matt's answer 是去的方法,但是只是给出了一个https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_regular_expressions-based的替代方案

-replace,主要是作为一个有趣的实验

注意:虽然这个解决方案很简洁,但在我的测试中它比.Substring()-based方法要慢2-3倍。

代码语言:javascript
复制
# Extract one half of the input string consisting of identical halves.
PS> '10.22.20.54/tcp/44310.22.20.54/tcp/443' -replace '^(.+)\1$', '$1'
10.22.20.54/tcp/443
  • Regex子表达式^(.+)在字符串的开始(^)匹配一个或多个(+) (非换行符)字符(.),并在捕获组中捕获它们。
  • \1$匹配一个反向引用(\1),它在字符串($)的末尾引用(第一个也是唯一的)捕获组匹配的内容。 实际上,只有当输入由相同的一半组成时,整个正则表达式才会匹配。
  • $1作为-regex替换操作数,然后返回(第1也是唯一)捕获组匹配的内容,即输入字符串的前半部分。

注意,这样的正则表达式效率很低,因为它需要大量的回溯,因为中途点是事先不知道的。

在这种情况下,使用非贪婪的修饰符(+?而不是+)也有效,但在实践中,在性能方面似乎没有什么区别(想必,使用.+?需要同样数量的“前向跟踪”尝试)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55120680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档