2012-10-23 208 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樹結尾:行不與結局「」