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

당신은 탈출 중입니다 T:TMOUT

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

이것은 큰 차이를 가져서는 안 되지만 무의미합니다. 음, 당신도 캐릭터와 일치하고 있어요뒤쪽에 TMOUT그러나 귀하의 파일은 그렇지 않습니다( sed마지막 개행 문자와 일치하지 않습니다). 이 시도:

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

나는 이것을 테스트할 비 GNU가 없고 이것이 대안에서 작동 sed할 것인지 확신하지 못합니다 . \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

관련 정보