regex - 仅替换文本文件特定行中的数字
问题描述
我有一个像这样具有唯一 IP 的文本文件
172.21.2.15|3
172.33.3.45|6
172.15.12.5|2
我需要根据 IP 找到一个特定的行,然后替换分隔符后的数字,将当前值加一。
到目前为止,我只能以这种方式找到该行
$client = "172.33.3.45"
$line = gc C:\myfile.txt | select-string $client | Select-Object -ExpandProperty Line
但是即使我已经进行了几次搜索,我也不知道如何进行替换。
如何将文件中此 IP 的数字加 1?
解决方案
尝试这个 :
$IPToFind='172.33.3.45'
$File=C:\myfile.txt
$Contentcsv=import-csv $File -Delimiter '|' -Header IP, ID
$Contentcsv | %{if($_.IP -eq $IPToFind){$_.ID=[int]$_.ID+1}; "{0}|{1}" -f $_.IP, $_.ID} | Out-File $File
如果您需要更多解释:
$IPToFind='172.33.3.45'
$Contentcsv=import-csv "C:\temp\test.txt" -Delimiter '|' -Header IP, ID
$Contentcsv | Foreach{
#modify value if IP is founded
if($_.IP -eq $IPToFind)
{
$_.ID=[int]$_.ID+1
};
#send tou output with -f (-format operator)
"{0}|{1}" -f $_.IP, $_.ID
} | Out-File "C:\temp\test.txt"