我必须更新多个客户端区域文件中的 spf 记录。
现有的 spf 记录看起来像这样:
"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx +include:spf.web-xxx.com ~all"
我需要做的是在 v=spf1 +a +mx 之后插入一个新的 ip 地址
期望的输出是
"v=spf1 +a +mx +ip4:yyy.yyy.yyy.yyy +ip4:xxx.xxx.xxx.xxx +include:spf.web-xxx.com ~all"
我正在尝试这个命令:
sed '/v=spf1 +a +mx /a +ip4:yyy.yyy.yyy.yyy' myfile
但它会将新的 ip 附加到该行的末尾
所以我尝试:
sed '/v=spf1 +a +mx /i +ip4:67.215.1.206' myfile
但我得到了相同的结果。
我不确定我做错了什么。
任何帮助表示赞赏。
凯里
答案1
在 GNUsed
插入i
和附加a
命令中添加新线路。您正在寻找替换中的字符串同一条线,因此您需要替代命令s
。
来自手册:
我发短信
在行前插入文本(替代语法)。
一段文字
在行后附加文本。这是标准 a 命令的 GNU 扩展 - 详细信息请参见下文。
例如
$ echo foo | sed ibar
bar
foo
$ echo foo | sed abar
foo
bar
假设这些行始终具有相同的格式,请尝试类似的操作:
$ sed 's/+/+ip4:127.0.0.1 +/4' file
"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx +ip4:127.0.0.1 +include:spf.web-xxx.com ~all"
它找到第四个加号+
"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx+……”
并将其替换为加号+
和 ip。