Contanto que stdout e stderr tenham buffer de linha e as linhas de um dos dois sejam sempre spottable, misturá-las não é um problema: considere a saída de um programa em que stdout e stderr são preenchidos com linha e em que stderr é facilmente reproduzível:
$ cat file
xxxxxxxxxx
tar: ----------
yyyyyyyyyy
tar: ----------
zzzzzzzzzz
tar: ----------
A extração de um dos dois usando grep não é um problema:
$ < file grep -v ^tar
xxxxxxxxxx # stdout line 1
yyyyyyyyyy # stdout line 2
zzzzzzzzzz # stdout line 3
$ < file grep ^tar
tar: ---------- # stderr line 1
tar: ---------- # stderr line 2
tar: ---------- # stderr line 3
No entanto, considere o caso em que, em algum momento, o comportamento do buffer stdout muda para, digamos, sem buffer:
x
tar: ----------
xxxxxxxxxyyy
tar: ----------
yyyyyyyzzzzz
tar: ----------
zzzzz
A extração de stdout usando grep é um problema:
$ < file grep -v ^tar
x # wrong stdout line 1
xxxxxxxxxyyy # wrong stdout line 2
yyyyyyyzzzzz # wrong stdout line 3
zzzzz # wrong stdout line 4
Tente isso:
< file perl -0777pe 's/\n?tar: [^\n]*\n//g' > newfile
Qual, excluindo os casos de [borda], deve extrair o stdout original do arquivo:
$ < file perl -0777pe 's/\n?tar: [^\n]*\n//g'
xxxxxxxxxxyyyyyyyyyyzzzzzzzzzz