Замена строк между двумя конкретными строками - эквивалент sed в cmd - PullRequest
0 голосов
/ 31 октября 2018

Я хочу заменить строки между двумя строками [REPORT] и [TAGS]. Файл выглядит так

Many lines 
many lines
they remain the same

[REPORT]

some text
some more text412

[TAGS]

text that I Want
to stay the same!!!

Я использовал sed в :

sed -e '/[REPORT]/,/[TAGS]/c\[REPORT]\nmy text goes here\nAnd a new line down here\n[TAGS]' minput.txt > moutput.txt

который дал мне это:

Many lines 
many lines
they remain the same

[REPORT]
my text goes here
And a new line down here
[TAGS]

text that I Want
to stay the same!!!

Когда я делаю это и открываю выходной файл в Блокноте, новые строки не отображаются. Я предполагаю, что это из-за проблемы с форматированием, простой Dos2Unix должен решить проблему.

Но из-за этого, а также в основном из-за того, что не все мои коллеги имеют доступ к cygwin Мне было интересно, есть ли способ сделать это в (или Powershell, если нет возможности сделать партию).

В конце концов, я хочу запустить это на количестве файлов и заменить этот раздел (между этими двумя вышеупомянутыми словами) на текст, который я предоставляю.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018
Set Inp = WScript.Stdin
Set Outp = Wscript.Stdout
Set regEx = New RegExp
regEx.Pattern = "\n"
regEx.IgnoreCase = True 
regEx.Global = True
Outp.Write regEx.Replace(Inp.ReadAll, vbcrlf)   

Для использования

cscript //nologo "C:\Folder\Replace.vbs" < "C:\Windows\Win.ini" > "%userprofile%\Desktop\Test.txt"

Так что вы можете использовать свой RegEx.

0 голосов
/ 31 октября 2018

Использовать PowerShell, присутствующий в Windows 7.

## Q:\Test\2018\10\30\SO_53073481.ps1
## defining variable with a here string
$Text = @"
Many lines 
many lines
they remain the same

[REPORT]

some text
some more text412

[TAGS]

text that I Want
to stay the same!!!
"@

$Text -Replace "(?sm)(?<=^\[REPORT\]`r?`n).*?(?=`r?`n\[TAGS\])",
               "`nmy text goes here`nAnd a new line down here`n"

В регулярном выражении -replace используются непотребляющие lookarounds

Пример вывода:

Many lines
many lines
they remain the same

[REPORT]

my text goes here
And a new line down here

[TAGS]

text that I Want
to stay the same!!!

Для чтения текста из файла, замены и обратной записи (даже без сохранения в var) вы можете использовать:

(Get-Content ".\file.txt" -Raw) -Replace "(?sm)(?<=^\[REPORT\]`r?`n).*?(?=`r?`n\[TAGS\])",
               "`nmy text goes here`nAnd a new line down here`n"|
Set-Content ".\file.txt"

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

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