我有以下文件:
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
我没有非 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