Substituir linha de palavras semelhantes por meio do SED

0

Eu tenho um arquivo sample_init.ora

Existem 2 linhas no arquivo.

db_create_file_dest="DATAG"
control_files=('DATAG/DBNAME/controlfile/control01.ctl','DATAG/DBNAME/controlfile/control02.ctl')

Agora, gostaria de alterar apenas a segunda linha de DATAG para DATAC2. Há algum caminho? Eu tentei muitos fóruns do SED / AWK, mas saí sem opções. Uma resposta baseada em SED seria ALTAMENTE considerada.

    
por Aravindhan K 17.08.2016 / 15:33

3 respostas

1

Sua pergunta se refere a linhas "semelhantes" - mas não nos diz como devemos distingui-las.

Por exemplo, para substituir todas as instâncias de DATAG por DATAC2 somente em linhas que começam com a string control_files , você pode usar

sed '/^control_files/ s/DATAG/DATAC2/g'

Ele deve funcionar como um método geral se você substituir ^control_files por algum outro padrão de distinção.

    
por 17.08.2016 / 16:32
1

A solução sed mais óbvia seria:

sed 2s/DATAG/DATAC2/g sample_init.ora > new_file.ora

ou para editar no local, se o seu sed suportar -i :

sed -i 2s/DATAG/DATAC2/g sample_init.ora 

A instrução sed é:

  • 2 - na linha 2
  • s// - pesquisar e substituir
  • g - substitua todos os jogos, não apenas o primeiro
por 17.08.2016 / 16:04
1

Desde que este seja o formato exato que as linhas serão exibidas no arquivo, use:

sed -i 's/DATAG\//DATAC2\//g' <filename> > <new_filename>

Isso funcionará quando as instâncias de DATAG na segunda linha tiverem um '/' seguindo-as, enquanto, na primeira linha, isso não acontece. Então, após a execução, o exemplo que você deu será:

db_create_file_dest="DATAG"
control_files=('DATAC2/DBNAME/controlfile/control01.ctl','DATAC2/DBNAME/controlfile/control02.ctl')

e não importa onde está o arquivo.

    
por 17.08.2016 / 16:13