我的一个hostraws.txt文件显示如下数据,我想在修剪后存在最后一个IP(10.110.20.77)。
| df1b0d4d-e240-49b2-aa6f-6ea878f696eb | Test-15-my_i-v2deggvdmd3g | ACTIVE | blcos10a-private = 10.106.15.104,10.110.20.77 | |
我该怎么做?有人可以帮帮我吗?
我只想要IP“10.110.20.77”
我尝试了三个mthords来获取IP.below是我尝试过的方法。当我尝试时,第一个方法,以及IP,我得到了“|”也
$hosts = Get-Content C:\hostraws.txt
foreach ($line in $hosts)
{
$split1 = $line.trim("|")
$split2 = $split1.Split(",")[1]
echo $split2 >> C:\ipaddress.txt
}
我的输出为 10.110.20.77 |
我如何才能获得IP?
我试过下面的第二个方法
foreach ($line in $hostsraw)
{
$split1 = $line.split('|')
echo $split1
$split2 = $split1.Split('|')[4]
echo $split2
}
df1b0d4d-e240-49b2-aa6f-6ea878f696eb
Test-15-my_i-v2deggvdmd3g
ACTIVE
blcos10a-private=10.106.15.104, 10.110.20.77
split1输出中有一个空格。当我回显$ split2时,根本没有输出
当我使用第三个方法时,我多次获得相同的IP地址,并且在PowerShell窗口中也出现错误
$hosts = Get-Content C:\hostraws.txt
foreach ($line in $hosts)
{
$split1 = $line.Split(',')[1]
$split2 = $split1.Split(' ')[1]
$split2 >> C:\ipaddress.txt
}
You cannot call a method on a null-valued expression.
At line:4 char:5
+ $split2 = $split1.Split(' ')[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At line:4 char:5
+ $split2 = $split1.Split(' ')[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At line:4 char:5
+ $split2 = $split1.Split(' ')[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At line:4 char:5
+ $split2 = $split1.Split(' ')[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
You cannot call a method on a null-valued expression.
At line:4 char:5
+ $split2 = $split1.Split(' ')[1]
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
这就是hostsrwa.txt内容的存在方式.ipsddress信息不在同一行,它在第二行。
答案 0 :(得分:1)
$input = "| df1b0d4d-e240-49b2-aa6f-6ea878f696eb | Test-15-my_i-v2deggvdmd3g | ACTIVE | blcos10a-private=10.106.15.104, 10.110.20.77 | |"
$partial = $string.Substring($string.IndexOf(",")+2)
$partial.Substring(0, $a.IndexOf(" "))
#result: 10.110.20.77
第一步是在变量$input
中分配值。由于powershell自动转发数据类型,我们可以调用Substring()或IndexOf()等字符串的方法。
此解决方案不起作用时(字符串连接)
当从开始到原始的“,”将出现更多或相等的1次
",,,,,, | ACTIVE | blcos10a-private=10.106.15.104, 10.110.20.77 | |" #fail
"| ACTIVE | blcos10a-private=10.106.15.104, 10.110.20.77 ,,,| |" #ok
第一次出现,
"| ACTIVE | blcos10a-private=10.106.15.104, 10.110.20.77 | |" #fail
如果在IP之后空格不正确
"| ACTIVE | blcos10a-private=10.106.15.104, 10.110.20.77| |" #fail
答案 1 :(得分:0)
这很丑陋,但您可以使用附带图片中的示例来解析您的文本行。它的工作原理如下:在管道符号处拆分,返回索引4上的行(基于零),在空格字符处拆分,并返回索引2.图像中的最后一行是不必要的。它的唯一目的是表明它只返回IP而不是IP地址两侧的任何额外空格。
编辑:如果你能做到一次,你总是可以把它放在循环中。考虑我的stackfile.txt文件有四个条目。使用下图中的循环示例将获得每个IP地址。
正如所建议的,这里是图像中的代码。第一节中的最后两个在数字2周围丢失了方括号。
$FileContent = Get-Content -Path .\Desktop\stackfile.txt
Foreach ($Line in $FileContent) {
$Line.Split('|')[4].Split(' ')[2]
}
和
{{1}}
注意:。\ Desktop \ stackfile.txt包含四行,其中IP为10.111.20.77,10.112.20.78,10.113.20.79和10.114.20.80
答案 2 :(得分:0)
您可以尝试的是,首先,看看您希望第一次拆分的位置,似乎只有,
的一个实例,您需要该IP地址,所以......
$split1 = $line.Split(',')[1]
这将创建10.110.20.77 | |
的捕获并将其存储在$split1
现在你可以用空格分割它并再次选择第一个实例:
$split2 = $split1.Split(' ')[1]
这将创建10.110.20.77
的捕获并将其存储在$split2
$hosts = Get-Content C:\hostraws.txt
ForEach ($line in $hosts)
{
#split by comma and take first instance
$split1 = $line.Split(',')[1]
#split by whitespace and take first instance
$split2 = $split1.Split(' ')[1]
#Append to file
$split2 >> C:\ipaddress.txt
}
我已对上述内容进行了测试,并使其与您的编码风格类似。这将完全按照您的要求生成,只要hostraws.txt中的每一行都采用相同的格式。