2012-10-23 116 views
0

我有一个文本文件,我想在文本中间插入更多文本。 我有这个输入文本:将信息添加到文本文件

[etc....] 
relay_recipient_maps = 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador 
[etc...] 

最后一行之后,我想“暗vador线”后插入阿纳金,但我没有任何想法如何解决我的问题。

回答

0

取决于您正在使用的外壳。 您可以庆典,zsh的范围内做到这一点,也许一些人:

echo "the dark vador line" >> file_with_content.txt 

这将追加字符串到文件的末尾。

0

您可以使用SED:

sed -e '/dark_vador/ s/$/Anakin/' file.txt 

对于包含模式dark_vador每一行,字符串Anakin将被追加到该行的末尾。

如果你只想在第一场比赛做到这一点,你可以追加后退出:

sed -e '/dark_vador/ { s/$/Anakin/; q }' file.txt 

sq命令必须组合在一起,所以他们只在具有dark_vador线执行,否则第一行读取后将退出q(即使它不包含dark_vador)。

如果您想的dark_vador行后追加一个行,您可以使用a命令:

sed -e '/dark_vador/ a\ 
Anakin' file.txt 

这将dark_vador每行后创建Anakin一个新行。如上所述,你可以退出,如果你只是想后的首场比赛添加一行:

sed -e '/dark_vador/ { a\ 
Anakin 
q }' file.txt 

希望这有助于=)

1

下面是使用GNU sed的一种方式。运行像:的script.sed

sed -f script.sed file.txt 

内容:

/relay_recipient_maps =/,/[^,]$/ { 

    /relay_recipient_maps =/ n 

    /[^,]$/ { 
     s/[ \t]*$/,/ 
     a\    btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin 
    } 
} 

或:

/relay_recipient_maps =/,/[^,]$/ { 

    /btree.*[^,]$/ { 
     s/[ \t]*$/,/ 
     a\    btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin 
    } 
} 

结果:

[etc....] 
relay_recipient_maps = 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador, 
       btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin 
[etc...] 
+0

谢谢你,但Dark_vador后,阿纳金走‘relay_recipient_maps’块的最后一行。如何检索动态方式的最后一行,并在列表中添加一个新项目 –

+0

好问题...给我一分钟。 – Steve

+0

是的,这可能是一个很好的问题:) 我注意到有关键字像“btree:/ opt/pmx69/postfix/etc/vdm_valid_users_”和“,”隔离最后一行。但我不知道bash脚本...... –

0

这是一个GNU sed的替代:

sed '/^relay_recipient_maps/,/[^,]$/{/btree:.*[^,]$/s##&,\n btree:/opt/pmx69/postfix/etc/vdm_valid_users_Anakin#}' file.txt

它是如何工作的:

对于该块开始与“relay_recipient_maps”,以及所有后续行,直到一个不带逗号结束,则替代“B树:”行不与逗号结尾(这将是“relay_recipient_maps”块中的最后一个btree),同一行加上“,”和所需的新行。

这是假设“relay_recipient_maps”块总是以B树结尾:行不与结局“”