使用bash在特定行之后插入一个新行

时间:2016-06-08 08:44:15

标签: bash

假设我有一个文件iptables_manager.py并希望在特定行之后插入一行。

输入:

        tables['filter'].add_chain('local')
        tables['filter'].add_rule('neutron-filter-top', '-j $local',
                                  wrap=False)
    builtin_chains = {4: {'filter': ['INPUT', 'OUTPUT', 'FORWARD']},
                      6: {'filter': ['INPUT', 'OUTPUT', 'FORWARD']}}

输出:

        tables['filter'].add_chain('local')
        tables['filter'].add_rule('neutron-filter-top', '-j $local',
                                  wrap=False)
        tables['filter'].add_rule('FORWARD', '-p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360',
                                  wrap=False, top=True)
    builtin_chains = {4: {'filter': ['INPUT', 'OUTPUT', 'FORWARD']},
                      6: {'filter': ['INPUT', 'OUTPUT', 'FORWARD']}}

有没有一种简单的方法可以使用bash脚本来实现这一目标?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

对于您希望在wrap=False之后插入多行的特定情况,您可以使用sed r ead,它将在匹配的行之后读取文件(包括):

sed '/wrap=False/r new_lines.txt' input.txt > output.txt

备选方案,您可以使用a fter命令,该命令将在匹配的行后插入指定的文本:

sed '/wrap=False/a \        tables['\''filter'\''].add_rule('\''FORWARD'\'', '\''-p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1360'\'',\n                                  wrap=False, top=True)\n' input.txt > output.txt

两者都应该这样做,但正如你所看到的那样a fter命令看起来很难看。