A maneira mais fácil de fazer isso é na sua máquina GNU / Linux usando sed(1)
. Supondo que apenas os arquivos de texto que você deseja transformar estejam no diretório:
$ for a in /path/to/directory/*txt; do sed -i '1,3{s/tag1/tagOne/g;}' "${a}"; done
O que isso faz, explicado com mais detalhes:
-
Há um loop para iterar os arquivos com os quais você deseja trabalhar:
for a in [...]; do [...]; done
-
Para cada iteração, a variável
a
manterá o nome de um arquivo correspondente ao padrão de globbing/path/to/directory/*txt
. -
Quando soubermos com que arquivo estamos trabalhando, vamos
do
algo com ele, neste caso, um comandosed
:sed -i '1,3{s/tag1/tagOne/g;}'
-
O sinal
-i
significain place
, portanto, o comandosed
não precisará gravar arquivos temporários. Em seguida,1,3
define o intervalo de linhas em que o comandosed
irá operar. As chaves são o operador de agrupamento, que significa "da linha 1 a 3, execute o comando interno". Esse comando és
: replace. O comando replace aceita uma expressão regular para correspondência e uma sequência para substituir essa correspondência por, neste caso, você deseja substituirtag1
portagOne
. O comando termina com o modificadorg
, que significaglobal
.
Em inglês, todo o comando diz:
For every file in the designated directory, whose name ends with txt, replace in it, but only in the lines one to three, all the occurrences of tag1 with tagOne.