Unix 向文本文件添加信息 我有一个文本文件,我想在文本中间插入更多的文本。 我得到了这个输入文本: [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...]
在最后一行之后,我想在“黑暗瓦多行”后面插入阿纳金,但我不知道如何解决我的问题。取决于您使用的shell。 您可以在bash、zsh和其他一些软件中执行此操作:Unix 向文本文件添加信息 我有一个文本文件,我想在文本中间插入更多的文本。 我得到了这个输入文本: [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...],unix,text,append,Unix,Text,Append,在最后一行之后,我想在“黑暗瓦多行”后面插入阿纳金,但我不知道如何解决我的问题。取决于您使用的shell。 您可以在bash、zsh和其他一些软件中执行此操作: echo "the dark vador line" >> file_with_content.txt 这将把字符串附加到文件的末尾。您可以使用sed: sed -e '/dark_vador/ s/$/Anakin/' file.txt 对于包含图案dark\u vador的每一行,字符串Anakin将附加到行的末尾
echo "the dark vador line" >> file_with_content.txt
这将把字符串附加到文件的末尾。您可以使用sed:
sed -e '/dark_vador/ s/$/Anakin/' file.txt
对于包含图案dark\u vador
的每一行,字符串Anakin
将附加到行的末尾
如果只想在第一次匹配时执行此操作,可以在附加以下内容后退出:
sed -e '/dark_vador/ { s/$/Anakin/; q }' file.txt
必须将s
和q
命令组合在一起,以便它们仅在具有dark\u vador
的行上执行,否则q
将在第一行读取后退出(即使它不包含dark\u vador
)
如果要在dark\u vador
行之后添加一行,可以使用a
命令:
sed -e '/dark_vador/ a\
Anakin' file.txt
这将在使用dark\u vador
的每一行之后创建一个带有Anakin
的新行。如上所述,如果只想在第一次匹配后添加一行,则可以退出:
sed -e '/dark_vador/ { a\
Anakin
q }' file.txt
希望这有帮助=)这里有一种使用GNU sed的方法。运行方式如下:
sed -f script.sed file.txt
script.sed的内容
:
/relay_recipient_maps =/,/[^,]$/ {
/relay_recipient_maps =/ n
/[^,]$/ {
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...]
这是一种基于GNU的替代方案:
sed'/^relay\u recipient\u maps/,/[^,]$/{/btree:.[^,]$/s###&,\n btree:/opt/pmx69/postfix/etc/vdm\u valid\u users\u Anakin#}file.txt
工作原理:
对于以“relay\u recipient\u maps”开头的块,以及所有后续行,直到其中一行不以逗号结尾,然后将“btree:”行不以逗号结尾(这将是“relay\u recipient\u maps”块中的最后一个btree)替换为该行加“,”和所需的新行
这假设“中继收件人地图”块始终以B树结尾:行不以“,”结尾。谢谢,但在天黑后,阿纳金将占据“中继收件人地图”块的最后一行。如何以动态方式检索最后一行,并在列表中添加一个新项Yep,这可能是一个好问题:)我注意到有诸如“btree:/opt/pmx69/postfix/etc/vdm_valid_users”和“隔离最后一行”之类的关键字。但我不知道bash脚本…一个很好的问题。。。在我上面列出的结果中,您是否希望黑暗的瓦多尔线也以
,
结尾?在“达斯维德”之后有一条线“,”而阿纳金成为最后一条线“,”。有人让我看一下postconf的侧面
[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...]