Powershell - Подберите и замените - PullRequest
0 голосов
/ 02 июня 2018

Попытка сопоставления и замены при сохранении порядка содержимого в файле.

(Get-Content output.txt) |
    ForEach-Object { if ($_ -match ".mp4") {$_ -replace "img", "source"} } | Set-content output.txt

output.txt:

<img src="img_a.PNG">
<img src="video_1.mp4">
<img src="img_b.PNG">
<img src="video_2.mp4">

Вывод:

<source src="video_1.mp4">
<source src="video_2.mp4">

Но я пытаюсь получить это:

<img src="img_a.PNG">
<source src="video_1.mp4">
<img src="img_b.PNG">
<source src="video_2.mp4">

Кажется, это перезаписывается?

1 Ответ

0 голосов
/ 02 июня 2018

Попробуйте выполнить следующее:

(Get-Content output.txt) -replace '<img (?=.+\.mp4)', '<source ' |
  Set-Content output.txt

Это может быть сделано более надежным, но работает с образцом ввода.

Вышеприведенное опирается на:

  • (положительное) прогнозное утверждение ((?=...)), которое совпадает с частью ввода, не считая его частью общего соответствия и, следовательно, не заменяя его.

  • -replace прохождение любых несоответствующих входов через как есть.


Что касается то, что вы пытались :

Byвыдает результат, только если условие if ($_ -match ".mp4") верно, вы фактически пропускаете строки ввода, которые не соответствуют .mp4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...