替换两个特定字符串之间的行 - 在 cmd 中等效于 sed
Replacing lines between two specific strings - sed equivalent in cmd
我想替换两个字符串 [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!!!
我在 cygwin:
中使用了 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
我想知道是否有办法在 cmd(或 Powershell
如果没有办法做一个批次)。
最终,我想 运行 对文件数量进行修改,并将其中的这一部分(在上述两个词之间)更改为我提供的文本。
使用 PowerShell,从 Windows 7 日开始。
## Q:\Test18\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"
要在一个管道中重复使用相同的文件名,括号是必需的。
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。
我想替换两个字符串 [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!!!
我在 cygwin:
中使用了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
我想知道是否有办法在 cmd(或 Powershell
如果没有办法做一个批次)。
最终,我想 运行 对文件数量进行修改,并将其中的这一部分(在上述两个词之间)更改为我提供的文本。
使用 PowerShell,从 Windows 7 日开始。
## Q:\Test18\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"
要在一个管道中重复使用相同的文件名,括号是必需的。
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。