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"

4番目のプラス記号を探します。+

"v=spf1 +a +mx +ip4:xxx.xxx.xxx.xxx+… 」

プラス記号とIPに置き換えます+

関連情報