如果您信任此答案的“类似sed”的VB脚本...
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 个或多个空格。
这不是最好的“纯 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