使用 SED 将字符串插入到行中的特定位置

使用 SED 将字符串插入到行中的特定位置

我必须更新多个客户端区域文件中的 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。

相关内容