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    

私はこれをテストするための非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

関連情報