将信息添加到文本文件中

时间:2012-10-23 13:18:38

标签: unix text append

我有一个文本文件,我想在文本中间插入更多文本。 我有这个输入文字:

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

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

4 个答案:

答案 0 :(得分:1)

这是使用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
    }
}

或:

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

答案 1 :(得分:0)

取决于您使用的是什么外壳。 你可以在bash,zsh和其他一些人中做到这一点:

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

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

答案 2 :(得分: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

这会在Anakin的每一行之后用dark_vador创建一个新行。如上所述,如果您只想在第一次匹配后添加一行,则可以退出:

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

希望这有助于=)

答案 3 :(得分:0)

这是一个GNU sed替代方案:

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

工作原理:

对于以“relay_recipient_maps”开头的块,以及所有后续行直到以逗号结尾的行,然后替换不以逗号结尾的“btree:”行(这将是“relay_recipient_maps”块中的最后一个btree)用同一行加上“,”和所需的新行。

这假设“relay_recipient_maps”块总是以btree结尾:不以“,”结尾的行