![AIX-需要在使用非 GNU - Sed 识别文件中的模式后添加行](https://linux22.com/image/73283/AIX-%E9%9C%80%E8%A6%81%E5%9C%A8%E4%BD%BF%E7%94%A8%E9%9D%9E%20GNU%20-%20Sed%20%E8%AF%86%E5%88%AB%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%A8%A1%E5%BC%8F%E5%90%8E%E6%B7%BB%E5%8A%A0%E8%A1%8C%20.png)
我有以下文件:
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