perl -pi -e 's|\d+|$&/2|e if $. == 1; close ARGV if eof' ./*.txt
Substituiria a primeira seqüência de dígitos decimais na primeira linha de cada arquivo txt
não oculto no diretório atual, com a representação decimal canônica de metade do número correspondente (3 para 006, 3,5 para 007, por exemplo) .
Se o número for muito grande (como maior que 1e20), perl
pode mudar para a notação de engenharia (5e + 19).
Obviamente, essa abordagem é válida apenas para números inteiros decimais. Quando aplicado a .1
, forneceria .5
em vez de 0.05
; quando aplicado a 1.5, daria 0.5.5
em vez de 0.75
; quando aplicado a 0x10
, daria 0x10
(somente 0
é reduzido pela metade) em vez de 8 ou 0x8 e assim por diante.
Se você quisesse manipular números decimais em qualquer notação (1, 010 (significando 10, não octal 8), -1.123, 2.23e-4, inf, infinito, NaN ...)), você precisaria adapte a expressão regular correspondente, como:
s{(\d*\.\d+|\d+\.?)(e[-+]?\d+)?|nan|inf(inity)?}{$&/2}ie
Ou faça uma suposição sobre onde o número está na linha, como se fosse a primeira sequência de caracteres sem espaçamento:
s{\S+}{$&/2}e