Depende da situação particular. Seu primeiro exemplo pode ser resolvido usando sed
ou awk
. Por exemplo, usando awk
:
$ awk '
/undefined/ {printf "%s = error \"%s\"\n", $1, $1; next}
{print}
' input
Que produz:
foo1 = error "foo1"
foo2 = error "foo2"
foo3 = foobar 7
foo4 = error "foo4"
Ou usando sed
:
sed '
/undefined/ s/\([^ ]*\) =.*/ = error ""/
' input
Seu segundo exemplo provavelmente seria mais fácil de fazer com awk
ou alguma linguagem de nível superior como Perl ou Python. Novamente, com awk
:
awk '
{
split($0, parts, "=")
items[i++] = parts[2]
}
i%3 == 0 {
printf "Magic(%s, %s, %s)\n", items[0], items[1], items[2]
i=0
}
' input
Que produz:
Magic(ABC, DEF, GHI)
Magic(123, 456, 789)
Mais geralmente ... Não tenho certeza se é possível fornecer uma resposta geral. Isso realmente depende da tarefa específica que você está tentando realizar. Uma vez que você retirou awk
você já está escrevendo um programa em uma linguagem de programação real , então você não deve evitar uma ferramenta de nível superior (como Perl ou Python ou Ruby ou qualquer outra coisa) só porque é mais capaz.