com sed
:
LC_ALL=C sed -e 's/^\([^ ]*\) \(.* error\)/_/' <file
assumindo que há apenas um error
em uma linha.
Tentando substituir um padrão dentro de linhas de texto por um padrão encontrado no início da mesma linha.
Tendo algum texto:
number4456 reports a high level of error
number3458 taking a proper error warning
number9273 is not an error prone software
Saída desejada:
reports a high level of error_number4456
taking a proper error_number3458 warning
is not an error_number9273 prone software
awk '{a = "";for(i=2;i<=NF;i++){if($i ~ /error/)a = a$i"_"$1" ";else a = a$i" "}print a}' yourfile
Tags text-processing