Duvidas com o comando echo do terminal

Boa tarde, com o comando echo eh possivel sobrescrever o conteudo ou adicionar um texto na ultima linha, ate ae blz, minha duvida eh a seguinte, é possivel achar uma linha com um conteudo especifico e sobrescrever essa linha?
ex:
tenho um arquivo de texto com varias linhas, em uma das linhas existe o coteudo “Versao: 1.0.0”
nesta linha tem somente este texto, mais nenhum, gostaria de sobrescrever este conteudo com outro texto, no caso seria “Versao: 1.0.1”, depois “Versao: 1.0.2” e por ae vai

Obrigado.

Você pode usar o sed

Exemplos

No google você pode entrar vários exemplos

Pode usar grupo e tr ou cut

1 curtida

Primeiro, carregaria o conteúdo do arquivo em uma variável no bash, e depois usaria uma substituição de variável.

TEXTO=$(<arquivo.txt)
echo "${TEXTO/Versao: 1.[0-9].[0-9]/Versao: 1.0.1}" >arquivo.txt

Essa substituição vai afetar somente o primeiro alvo da variável, então se a linha que tu quer modificar for a primeira que contém o padrão “Versao: 1.0.0” etc, ela vai ser atingida.

Essa substituição usa globs, diferente de regex. Para substituições mais compexas, pode setar a opção glob extendido da shell com shopt -s extglob.

Talvez seja mais fácil com sed…

Dá e não dá, tu pode usar expansões do Bash:

EXEMPLO="A versão 1.0.0 está muito legal" 
echo "${EXEMPLO/.0 /.X }"
# Saída A versão 1.0.X está muito legal"

Funciona assim:

EXEMPLO é a variável .0 é o que você procura e .X é a substituição (note o espaço, sem ele o meio seria substituído), generalizando:

${VARIÀVEL/texto procurado/texto que vai substituir o texto procurado}

Existem alguns truques que você pode usar como marcar o final, pra fazer isso coloque % no começo do texto a ser pesquisado:

EXEMPLO="Versao: 1.0.0"
echo "${EXEMPLO/%.0/.1}"
# Saída Versao: 1.0.1
EXEMPLO="Versao: 1.0.0 teste"
echo "${EXEMPLO/%.0/.1}"
# Saída Versao: 1.0.0 teste

Mas já que tu quer isso, use AWK:

EXEMPLO="1.0.0"
EXEMPLO=$(echo "${EXEMPLO}" | awk -F. -v OFS=. '{$NF++;print}') #1.0.1
EXEMPLO=$(echo "${EXEMPLO}" | awk -F. -v OFS=. '{$NF++;print}') #1.0.2
EXEMPLO=$(echo "${EXEMPLO}" | awk -F. -v OFS=. '{$NF++;print}') #1.0.3

Basicamente esse comando pega a última coluna separada por . e soma 1 cada vez que é chamado