Eu também faria isso em Perl:
$ for f in *txt; do perl -pne 'print "spam\n" if /^potato/' "$f"; done
hello
spam
potato
world
spam
not potato
bye
O -p
flag faz com que o perl imprima cada linha do arquivo de entrada. O -n
significa "leia o arquivo de entrada linha por linha" e aplique o script fornecido por -e
em cada linha. Em seguida, o próprio script imprimirá spam
se a linha atual contiver potato
e imprimirá cada linha. O resultado será a string spam
impressa acima das linhas contendo potato
.
Isso simplesmente imprimirá o novo arquivo sem modificá-lo. Se você quiser fazer as alterações no arquivo original, use -i
:
$ for f in *txt; do perl -i.bak -pne 'print "spam\n" if /^potato/' "$f"; done
Isso criará um arquivo de backup chamado foo.txt.bak
para cada arquivo processado e aplicará as alterações a foo.txt
.