在 freebsd 中的最后一行之前插入字符串

在 freebsd 中的最后一行之前插入字符串

我得到了以下内容的文件:

protocol static {
        route 100.100.100.100/32 via 192.168.56.2;
        route 1.1.1.1/32 via 10.0.2.15; 
}

我需要添加一个路由字符串

a.b.c.d/32 via a.b.c.d

route 1.1.1.1/32 via 10.0.2.15;

我该怎么做?

答案1

sed '\Xroute 1.1.1.1/32 via 10.0.2.15;Xa\
a.b.c.d/32 via a.b.c.d;
' protstat

选择正则表达式分隔符\XX,在它之后您可以找到您的模式,在它之后是X(结束正则表达式) 和a(附加)。它后面跟着一个反斜杠 ( \) 和一个换行符 (!),在它之后是您的新规则,在它之后是换行符和撇号。 是protstat您的文件名。

如果您想要就地修改,则应将其添加-ibak到选项中 - 在这种情况下,您将拥有备份文件。如果您想省略备份,则应添加(空后缀)。sedprotstatbak-i""

答案2

一种选择是使用Ansible. 模块行输入文件完全满足您的需要。

下面的简单剧本将以下行添加到文件中/scratch/route.cfg在主机测试_01

> cat play.yml
- hosts: test_01
  tasks:
    - lineinfile:
        path: /scratch/route.cfg
        regexp: "^\\s*route a.b.c.d/32\\s*via"
        line: "        route a.b.c.d/32 via a.b.c.d;"
        insertafter: "^\\s*route 1.1.1.1/32\\s*via"

> ansible-playbook play.yml
PLAY [test_01] 
******************************************************************************
TASK [lineinfile] 
***************************************************************************
changed: [test_01]
PLAY RECAP 
*************************************************************************
test_01                    : ok=1    changed=1    unreachable=0    failed=0   

结果

# cat route.cfg
protocol static {
        route 100.100.100.100/32 via 192.168.56.2;
        route 1.1.1.1/32 via 10.0.2.15; 
        route a.b.c.d/32 via a.b.c.d;
}

仅供参考。有关如何使用 FreeBSD 和 Ansible 的大量详细信息可在 Ansible 角色中找到freebsd_postinstall

相关内容