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 向文本文件添加信息 我有一个文本文件,我想在文本中间插入更多的文本。 我得到了这个输入文本: [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将附加到行的末尾

在最后一行之后,我想在“黑暗瓦多行”后面插入阿纳金,但我不知道如何解决我的问题。

取决于您使用的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
将附加到行的末尾

如果只想在第一次匹配时执行此操作,可以在附加以下内容后退出:

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...]