Tente isto:
#!/bin/bash
n=1
while [[ -f file.$n ]]; do
n=$((n+1)
done
sed -e 's/'$2'/'$3'/g' $1 > "file.${n}"
Estou tentando codificar um script simples que usa sed para localizar e substituir a funcionalidade básica. Eu quero ter arquivo original intocado e ter resultados em novos arquivos chamados "file.n" (n está sendo incrementado).
Meu principal problema é com a numeração de novos arquivos. Este é um código básico meu que tem funcionalidade estática para n = 1 en = 2:
#!/bin/bash
n=1
if [[ -f file.$n ]]
then sed -e 's/'$2'/'$3'/g' $1 > file.$((n+1))
else sed -e 's/'$2'/'$3'/g' $1 > file.1
fi
A entrada no terminal é semelhante a: ./ script text_sample.txt word_1 word_2
Este código funciona bem para o primeiro e o segundo uso (se o arquivo 1 não existiu, ele salvará os resultados aqui; senão ele será salvo no arquivo. (n + 1) que é o arquivo.2).
Mas como eu faço isso para file.3, file.4 etc? Depois de lançar este script todas as vezes, no começo é n = 1 e eu realmente não tenho mais idéias sobre como posso lidar com isso.
Eu já tentei algumas variáveis de exportação, usando uma variável específica como um comando (para tornar esse inteiro mais parecido com global); Eu acho que alguns loops podem ser necessários ...
Qualquer ajuda seria apreciada.
sed tem um recurso de backup
tente sed -i [SUFFIX]
Tags bash zsh shell shell-script