我得到了以下内容的文件:
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
选择正则表达式分隔符\X
为X
,在它之后您可以找到您的模式,在它之后是X
(结束正则表达式) 和a
(附加)。它后面跟着一个反斜杠 ( \
) 和一个换行符 (!),在它之后是您的新规则,在它之后是换行符和撇号。 是protstat
您的文件名。
如果您想要就地修改,则应将其添加-ibak
到选项中 - 在这种情况下,您将拥有备份文件。如果您想省略备份,则应添加(空后缀)。sed
protstatbak
-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