Isso pode ser o que você quer
Um arquivo em lote lidou com isso de forma surpreendentemente limpa!
Onde a.a
é seu arquivo de dados
blahblah.bat é um arquivo em lote de uma linha
C:\Users\harvey>type blahblah.bat
@for /f "tokens=1,2 delims= " %%f in (a.a) do @IF "%%f"=="01" (echo 01 00000000000000000000000000000000000 XYZ) ELSE IF NOT "%%f"=="01" ECHO %%f %%g
C:\Users\harvey>
execute o arquivo em lote
C:\Users\harvey>blahblah
01 00000000000000000000000000000000000 XYZ
02 157
01 00000000000000000000000000000000000 XYZ
02 158
01 00000000000000000000000000000000000 XYZ
02 163
01 00000000000000000000000000000000000 XYZ
02 165
01 00000000000000000000000000000000000 XYZ
02 175
C:\Users\harvey>
Isso parece remover linhas em branco, pode haver uma maneira de contornar isso com lote, mas outra maneira, além de lote, é usar sed.
C:\Users\harvey>sed -r "s/^01.*/01 00000000000000000000000000000000000 XYZ/" a.a
01 00000000000000000000000000000000000 XYZ
02 157
01 00000000000000000000000000000000000 XYZ
02 158
01 00000000000000000000000000000000000 XYZ
02 163
01 00000000000000000000000000000000000 XYZ
02 165
01 00000000000000000000000000000000000 XYZ
02 175
Você pode, claro, adicionar >b.b
para redirecionar essa saída para um novo arquivo, para poder fazer sed -r "......." a.a > b.b
, ou seja, sed -r "s/^01.*/01 00000000000000000000000000000000000 XYZ/" a.a > b.b