Если вы доверяете сценарию VB "sed-like" из , этот ответ ...
sed.vbs:
Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
inp = WScript.StdIn.ReadLine()
WScript.Echo rxp.Replace(inp, patparts(2))
Loop
Вы можете набрать
cscript /Nologo sed.vbs s/^\d+\s*$/ < in.txt
(исходный текст - in.txt)
и вы получите ожидаемый результат ...
^\d+\s*$
Нацелен на любую строку, начинающуюся с одной или нескольких цифр, за которой следуют 0 или более пробелов в одной строке.
Это не лучшее решение "pure sed", и оно не может фактически удалить строки, но это нативное "совместимое с Vista" решение ...
На самом деле, следующий хак, преднамеренно интерпретирующий "d
sed-command", мог бы "удалить" строки:
Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
inp = WScript.StdIn.ReadLine()
out = rxp.Replace(inp, patparts(2))
if not patparts(2)="d" or not out="d" Then
WScript.Echo out
end if
Loop
cscript /Nologo sed.vbs s/^\d+\s*$/ < in.txt
фактически произведет:
[aaa bbb]
[ccc ddd]
В .bat у вас может быть sed.bat:
cscript /Nologo sed.vbs %1 < %2
и затем выполните этот .bat так:
C:\prog\sed>sed.bat s/^\d+\s*$/d in.txt