Usando leitura sem perder a tecla TAB

4

Estou usando a leitura em um loop while para alterar automaticamente um makefile após o download.

Aqui faz parte do script,

    while read a; do
    if [[ "$a" = "FCOMPL=g77" ]]
    then echo "FCOMPL=gfortran" >> makefile
    elif [[ "$a" = "FFLAGC=-Wall -O" ]]
    then echo "FFLAGC=-Wall -O -fno-backslash" >> makefile
    else
    echo $a >> makefile
    fi
    done <makefile.orig

O problema é que eu perco a tabulação.

Alguma ideia de como posso evitar isso?

    
por Presbitero 13.03.2013 / 15:34

2 respostas

3

Em vez de usar o bash para fazer a tarefa, você pode aprender sed :

sed -e 's/^FCOMPL=g77$/FCOMPL=gfortran/' \
    -e '/^FFLAGC=-Wall -O$/s/$/ -fno-backslash/' makefile.orig > makefile

Cada -esed um comando para executar. Nesse caso (1st -e), o comando s executa uma substituição : s/foo/bar/ substitui a primeira ocorrência de foo em cada linha por bar . Para ter certeza de que trabalhamos na linha completa, adicionei ^ (início da linha) e $ (fim da linha).

Você pode prefixar um comando por um seletor. Nesse caso (2ee), o comando s é aplicado apenas a uma linha correspondente a ^FFLAGC=-Wall -O$ .

Você pode até usar o sinalizador -i para substituir o arquivo:

sed -i -e 's/^FCOMPL=g77$/FCOMPL=gfortran/' \
       -e '/^FFLAGC=-Wall -O$/s/$/ -fno-backslash/' makefile
    
por jfg956 13.03.2013 / 19:21
3

Encontrei uma solução !! Eu apliquei o que é ensinado aqui link

    old_IFS=$IFS      # save the field separator           
    IFS=$'\n'     # new field separator, the end of line
    (code)
    IFS=$old_IFS     # restore default field separator 
    
por Presbitero 13.03.2013 / 15:56

Tags