AIX-Precisa adicionar linhas depois de identificar o Padrão no arquivo usando Não-GNU - Sed [duplicado]

2

Eu tenho o seguinte arquivo:

export TMOUT

PS1="$(hostname):${LOGNAME}:\${PWD} ${PROMPT} "
PS1="${FGOLD}$(hostname):${LOGNAME}:\${PWD} ${PROMPT} ${NORMAL}"  
PS1=abd  
PS1="$(hostname):$LOGNAME:\$PWD $PROMPT "  
export PS1 LANG

Eu preciso adicionar a linha abaixo na linha correspondente a export TMOUT :

FGOLD='echo "3[1;32m"'    

Assim, o resultado final deve ser assim:

export TMOUT  
FGOLD='echo "3[1;32m"'    

PS1="$(hostname):${LOGNAME}:\${PWD} ${PROMPT} "
PS1="${FGOLD}$(hostname):${LOGNAME}:\${PWD} ${PROMPT} ${NORMAL}"  
PS1=abd  
PS1="$(hostname):$LOGNAME:\$PWD $PROMPT "  
export PS1 LANG

O comando abaixo não está funcionando:

sed 's/.*export.*\TMOUT./&\FGOLD='echo "3[1;32m"'/' pro

saídas:

export TMOUT  

PS1="$(hostname):${LOGNAME}:\${PWD} ${PROMPT} "
PS1="${FGOLD}$(hostname):${LOGNAME}:\${PWD} ${PROMPT} ${NORMAL}"
PS1=abd
PS1="$(hostname):$LOGNAME:\$PWD $PROMPT "
export PS1 LANG
    
por Sivas 19.09.2015 / 11:52

2 respostas

0

Você está escapando do T de TMOUT :

sed 's/.*export.*\TMOUT./&\FGOLD='echo "3[1;32m"'/' pro
                 ^
                 |-----??

Isso não deve fazer muita diferença, mas é inútil. Então, você também está combinando um caractere após TMOUT , mas seu arquivo não tem nenhum ( sed não corresponderá à nova linha final). Tente isso:

sed 's/export TMOUT./&\nFGOLD='echo "\033[1;32m"'/' file    

Eu não tenho um não-GNU sed para testar isso e não tenho certeza se o \n funcionará na substituição. Se isso não funcionar, tente adicionar um \ e, em seguida, pressionando Enter para obter a nova linha:

sed 's/export TMOUT/&\    ## hit enter and continue writing on a new line
FGOLD='echo "\033[1;32m"'/' file 

Então, outras opções são:

perl -pe 's/export TMOUT/$&\nFGOLD=\'echo "\033[1;32m"\'/' file    

Ou awk :

awk '{
        if(/export TMOUT/){a=1}
        {
            print;
            if(a==1){
                print "FGOLD='echo \"\033[1;32m\"'";
                a=0
        }}}' file
    
por 19.09.2015 / 13:37
1

com qualquer sed:

sed '/export TMOUT/ a\
FGOLD='echo "\033[1;32m"'' file

ou coloque a string em uma variável

myvar='FGOLD='echo "\033[1;32m"''
sed '/export TMOUT/ a\
'"$myvar"'' file
    
por 19.09.2015 / 13:48