Digamos que o marcador old_word
seja conhecido. Podemos então usar grep
para obter o número do arquivo original:
NUM=$(grep -Po -m1 '(?<=old_word )\d+' FILE)
- Isso usa expressões regulares Perl. Ele diz que
old_world
deve preceder alguns dígitos, mas não deve ser considerado parte da correspondência real. -
-o -m1
diz ao grep para imprimir apenas a seção correspondente (o número) e apenas a primeira correspondência.
Depois, você pode combinar sua cópia com a modificação:
for i in {1..10}
do
NEXT_NUM=$((NUM + i*increment))
mkdir subdirectory_$i
sed -r 's/(old_word )'$NUM'/'$NEXT_NUM'/' FILE > subdirectory_$i/FILE
done
Coisas a considerar:
-
sed
não é muito bom em aritmética, portanto, se você quiser fazê-lo dentro da própria expressão, considere usar Perl ou Awk. - Você não pode fazer diretamente
a=1*2
em scripts de shell para executar aritmética. Você precisa colocar a expressão em$(( ))
:a=$((1*2))
ou usar palavras-chave comolet
. - As variáveis não são expandidas entre aspas simples, mas as expressões regulares geralmente contêm caracteres que têm um significado especial, por isso é mais seguro usar aspas simples para a expressão e deixá-las temporariamente para adicionar em nossa variável.
- Os parênteses em torno de
(old_word )
marcam isso como uma subexpressão, que você pode consultar depois usando(como pode ser visto na substituição).