Encontre palavras após um símbolo específico na linha

0

Eu preciso fazer um script bash que leia um arquivo contendo variable = text. O que eu preciso é que o script verifique o arquivo, ignore o nome da variável e procure por uma palavra no texto após o símbolo =.

Exemplo

thread.give_respect.title = Give respect
thread.receive_respect.title = Gain respect
thread.profile_respect.title = Show my Respect

Como a primeira parte é variável, não quero que a palavra respect seja alterada. Apenas aquele após o = Além disso, se possível, quero verificar se a palavra que quero alterar está com Capital ou não, para que eu possa alterá-la de acordo.

Editar:

Esteban Eu tentei o seu script, mas ele cria o arquivo com $ {var no início de cada linha.

Para os outros caras que estão perguntando o que eu quero substituir:

Temos arquivos enormes com variáveis de string = seu texto . Por exemplo:

admin.help_text = help
admin.Help_text = Help
home.faq_title = FAQ
...

Esses arquivos contêm mais de 15.000 variáveis e seus valores. Às vezes, precisamos alterar uma palavra para diferente , por exemplo:

**help** to **guidance** 
**Help** to **Guidance**
**helper** to **guide**
**Helper** to **Guide**

O que precisamos:

  1. Script que verifica um arquivo para: palavra1 , palavra2 , palavra3 e palavra4 .

  2. Se a palavra existir na linha para copiar essa linha em um arquivo separado.

  3. Após tudo ser feito para executar encontrar e substituir word1, word2 e etc. no novo arquivo.

Por exemplo, temos o arquivo (file1.txt) com todas as variáveis e seu conteúdo:

admin.help_text = help
admin.Help_text = Help
home.faq_title = FAQ
home.something.help = If you need help please send us email on...

Quando o script iniciar, ele verificará:

word1 = help
word2 = Help

E salva as linhas encontradas no arquivo2.txt

admin.help_text = help
admin.Help_text = Help
home.something.help = If you need help please send us email on...

Em seguida, o script verifica o arquivo2.txt e altera a ajuda para a orientação e a Ajuda para a Orientação

admin.help_text = guidance
admin.Help_text = Guidance
home.something.help = If you need guidance please send us email on...
    
por Apoc 11.05.2017 / 15:24

2 respostas

2

Desde a edição da pergunta:

@Apoc Se o número de padrões for limitado, você pode executar os passos 1 e 2 com este comando:

awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt

Para o passo 3, depende de como você quer e tem que fazer isso

Eu faria algo como:

  • Repetir cada linha
  • Recupere a parte variável
  • Faça a modificação desejada
  • Imprima a linha com a modificação em um arquivo de saída temporário
  • Substitua o arquivo pelo temporário

No script de shell:


#!/bin/sh

# Loop through lines
cat file.txt | while read line; do
  # Store variable part of the line
  var='echo $line | sed -r 's/^[^=][ ]?(.*)$//''

  # Make the modification you want on var
  # ...

  # Print in temporary file the modified line
  echo $line | sed -r 's/^([^=])/ ${var}/' >> temporary_file.txt
done

# Replace file by temporary one
mv temporary_file.txt file.txt
    
por 11.05.2017 / 17:41
-1

A partir da resposta comentários ao Esteban , a resposta final usada foi:

awk -F'=' '$2 ~ /word1|word2|word3|word4/' file1.txt > file2.txt
    
por 11.05.2017 / 23:10