簡體   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