0

テキスト ファイルがあり、テキストの途中にさらにテキストを挿入したいと考えています。私はこの入力テキストを持っています:

[etc....] 
relay_recipient_maps =
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador 
[etc...]

最後の行の後に、"the dark vador line" の後に Anakin を挿入したいのですが、問題を解決する方法がわかりません。

4

4 に答える 4

1

を使用する 1 つの方法を次に示しGNU sedます。次のように実行します。

sed -f script.sed file.txt

の内容script.sed:

/relay_recipient_maps =/,/[^,]$/ {

    /relay_recipient_maps =/ n

    /[^,]$/ {
        s/[ \t]*$/,/
        a\                btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
    }
}

また:

/relay_recipient_maps =/,/[^,]$/ {

    /btree.*[^,]$/ {
        s/[ \t]*$/,/
        a\                btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
    }
}

結果:

[etc....] 
relay_recipient_maps =
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_yoda,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_luke,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_rd2d2,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_c3p0,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_dark_vador,
                btree:/opt/pmx69/postfix/etc/vdm_valid_users_anakin
[etc...]
于 2012-10-23T13:34:04.223 に答える
0

これは GNU sed の代替です。

sed '/^relay_recipient_maps/,/[^,]$/{/btree:.*[^,]$/s##&,\n btree:/opt/pmx69/postfix/etc/vdm_valid_users_Anakin#}' file.txt

使い方:

「relay_recipient_maps」で始まるブロック、およびカンマで終わらない行までのすべての後続の行については、カンマで終わらない「btree:」行 (これは「relay_recipient_maps」ブロックの最後の btree になります) を同じものに置き換えます。行と「、」、および必要な新しい行。

これは、「relay_recipient_maps」ブロックが常に btree で終わることを前提としています: 行が「,」で終わらない

于 2012-10-23T18:05:05.217 に答える
0

使用しているシェルによって異なります。これは、bash、zsh、およびおそらく他のいくつかの中で実行できます。

echo "the dark vador line" >> file_with_content.txt

これにより、文字列がファイルの末尾に追加されます。

于 2012-10-23T13:21:00.967 に答える
0

sedを使用できます:

sed -e '/dark_vador/ s/$/Anakin/' file.txt

pattern を含む行ごとdark_vadorに、文字列Anakinが行末に追加されます。

最初のマッチでのみこれを行いたい場合は、追加後に終了できます:

sed -e '/dark_vador/ { s/$/Anakin/; q }' file.txt

sおよびqコマンドはグループ化して、 を含む行でのみ実行する必要があります。dark_vadorそうしないqと、最初の行が読み込まれた後に終了します (たとえ が含まれていなくてもdark_vador)。

行の後に行を追加したい場合は、次のコマンドdark_vadorを使用できます。a

sed -e '/dark_vador/ a\
Anakin' file.txt

Anakinこれにより、 の各行の後にで新しい行が作成されますdark_vador。上記のように、最初の一致の後にのみ行を追加したい場合は終了できます。

sed -e '/dark_vador/ { a\
Anakin
q }' file.txt

これが役立つことを願っています=)

于 2012-10-23T13:33:12.857 に答える