繁体   English   中英

PowerShell 从字符串中删除文本

[英]PowerShell to remove text from a string

在特定字符之后删除字符串中所有文本的最佳方法是什么? 在我的情况下,“=”和另一个字符在我的情况下 a , ,但保持文本之间?

样本输入

=保持这个,

另一种方法是使用 operator -replace

$TestString = "test=keep this, but not this."

$NewString = $TestString -replace ".*=" -replace ",.*"

.*=表示最多包含等号的任意数量的字符。

,.*表示逗号后跟任意数量的字符。

由于您基本上是删除字符串的这两部分,因此您不必指定一个空字符串来替换它们。 您可以使用多个 -replaces,但请记住顺序是从左到右。

$a="some text =keep this,but not this"
$a.split('=')[1].split(',')[0]

返回

keep this

这应该做你想做的:

C:\PS> if ('=keep this,' -match '=([^,]*)') { $matches[1] }
keep this

这真的很旧,但我想为其他可能偶然发现的人添加我的细微变化。 正则表达式是强大的东西。

要保留等号和逗号之间的文本:

-replace "^.*?=(.*?),.*?$",'$1'

这个正则表达式从行首开始,擦除所有字符直到第一个等号,捕获每个字符直到下一个逗号,然后擦除每个字符直到行尾。 然后用捕获组(括号内的任何内容)替换整行。 它将匹配包含至少一个等号后跟至少一个逗号的任何行。 它类似于 Trix 的建议,但与该建议不同的是,这不会匹配仅包含等号或逗号的行,它必须按顺序排列。

我在上面引用了@benjamin-hubbard 的答案来解析 A 记录的dnscmd输出,并生成 IP 和主机名的 PHP“字典”/键值对。 我将多个-replace args 串在一起以将文本替换为-replace制表符来格式化 PHP 文件的数据。

$DnsDataClean = $DnsData `
    -match "^[a-zA-Z0-9].+\sA\s.+" `
    -replace "172\.30\.","`$P." `
    -replace "\[.*\] " `
    -replace "\s[0-9]+\sA\s","`t"

$DnsDataTable = ( $DnsDataClean | `
    ForEach-Object { 
        $HostName = ($_ -split "\t")[0] ; 
        $IpAddress = ($_ -split "\t")[1] ; 
        "`t`"$IpAddress`"`t=>`t'$HostName', `n" ;
    } | sort ) + "`t`"`$P.255.255`"`t=>`t'None'"

"<?php
`$P = '10.213';
`$IpHostArr = [`n`n$DnsDataTable`n];

?>" | Out-File -Encoding ASCII -FilePath IpHostLookups.php

Get-Content IpHostLookups.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM