簡體   English   中英

Powershell:替換文件中最后一次出現的行

[英]Powershell: Replace last occurence of a line in a file

假設我們有一個文件 foo.txt:

abc
abc
abc

我想把它變成:

abc
abc
HelloWorld

此命令應該有效:

(gc foo.txt -Raw) -replace '(.*)abc', '$1HelloWorld' | Out-File foo.txt

因為我正在使用 -Raw 開關,它讀取整個文件而不是一次一行。 然后,貪婪模式 (.*) 應該匹配直到最后一個“abc”的所有內容並將其替換為“HelloWorld”。

但它不起作用。 “abc”的所有 3 次出現都被替換為“HelloWorld”,就好像“-replace”一次處理文件一行一樣,盡管有 -Raw 開關。

為什么?

您必須像這樣包含單行模式修飾符(?s)

(gc foo.txt -Raw) -replace '(?s)(.*)abc', '$1HelloWorld' | Out-File foo.txt

沒有它, . 不會匹配回車和換行。

為簡單起見,我將 PS 拆分為多行。 我正在用TEMPOR替換sed

嘗試:

$rx = '(?is)(.*)sed(.*)'           ## Search for last occurance of sed.
$replacement = '$1TEMPOR$2'        ## Replace sed with TEMPOR
(Get-Content -Path d:\data.txt -Raw) -ireplace $rx, $replacement | Out-File d:\test.txt

data.txt 的內容:

A nulla odio aptent metus, 
mattis mattis elementum iaculis, 
malesuada proin vestibulum suspendisse pellentesque wisi. 
Faucibus turpis a ac. Wisi eros sed sit nec sed, 
sed et fringilla vulputate mattis pretium, 
rutrum vitae vitae euismod erat eu. 
Ac feugiat sed elit, pellentesque amet dis, 
non lorem vero rutrum, vel eu sodales orci a, 
vestibulum ante consectetur. 
Dui wisi massa a ut seddictumst, 
ultricies sed metus, 
orci urna amet mauris nibh, leo nec fusce.

test.txt 的輸出:

A nulla odio aptent metus, 
mattis mattis elementum iaculis, 
malesuada proin vestibulum suspendisse pellentesque wisi. 
Faucibus turpis a ac. Wisi eros sed sit nec sed, 
sed et fringilla vulputate mattis pretium, 
rutrum vitae vitae euismod erat eu. 
Ac feugiat sed elit, pellentesque amet dis, 
non lorem vero rutrum, vel eu sodales orci a, 
vestibulum ante consectetur. 
Dui wisi massa a ut seddictumst, 
ultricies TEMPOR metus, 
orci urna amet mauris nibh, leo nec fusce.

希望它能回答你的問題。

這是您嘗試過的正確方法:

(Get-Content -Path C:\temp\test.txt -Raw) -replace '(.*)abc$', 'HelloWorld' | Out-File C:\temp\test.txt

這是另一種方法:

$lines = Get-Content -Path C:\temp\test.txt
$last = $lines.Length - 1
$lines[$last] = "testtest"
Set-Content -Path C:\temp\test.txt -Value $lines

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM