我有一個目錄中的文件files.txt的列表。我想通過每個文件運行一個文本替換。使用perl從powershell編輯文件
$f = (get-content files.txt)
Foreach ($i in $f) { perl -pi -we "s/(\d{0,4})- /$1 - /g" $i }
但是,perl並不喜歡在沒有做備份的情況下做到這一點。
不能在沒有備份的情況下進行編輯。
所以我加入了名爲.bak到-i:
$f = (get-content files.txt)
Foreach ($i in $f) { perl -pi.bak -we "s/(\d{0,4})- /$1 - /g" $i }
而現在抱怨:
無法打開perl腳本名爲 「.bak」:沒有這樣的文件或目錄
我錯過了什麼?
UPDATE:
我寧願是一個辦法做到這一點,而不完全是一個外殼。我可以在Perl中用$^I
做這個循環嗎?
在Windows上,需要自行放置-i.bak開關。像,perl -i.bak -pwe ...你確定你想要\ d {0.4}而不是\ d {1,4} –
@Chris Charley,這是不正確的。 Windows上的Perl接受'-pi.bak'完全正確。也就是說,PowerShell似乎會傳遞除'-pi.bak'(特別是'-pi .bak')之外的東西,所以這可能是* PowerShell *的正確選擇。 – ikegami
@wdkrnls,'perl -pi.bak -we「s /(\ d {0,4}) -/$ 1 -/g」'適用於'cmd'。這似乎是PowerShell特有的問題。 – ikegami