AIX-需要在使用非 GNU - Sed 识别文件中的模式后添加行

AIX-需要在使用非 GNU - Sed 识别文件中的模式后添加行

我有以下文件:

export TMOUT

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

我需要在匹配行下添加以下行export TMOUT

FGOLD=`echo "\033[1;32m"`    

所以,最终的输出应该是这样的:

export TMOUT  
FGOLD=`echo "\033[1;32m"`    

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

下面的命令不起作用:

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

输出:

export TMOUT  

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

答案1

对于任何 sed:

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

或将字符串放入变量中

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

答案2

你正在逃避TTMOUT

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

这应该不会有太大区别,但毫无意义。那么,你也在匹配一个角色 TMOUT但你的文件没有(sed不会匹配最终的换行符)。试试这个:

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

我没有非 GNUsed来测试这个,我不确定它是否\n可以在替代品中工作。如果这不起作用,请尝试添加 a \,然后按Enter获取换行符:

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

所以,其他选择是:

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

或者awk

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

相关内容