複数のファイル名を渡す場合、sed 出力に空白行を印刷します。

複数のファイル名を渡す場合、sed 出力に空白行を印刷します。

ldapaddLDAPディレクトリに新しいエントリを追加するために提供されたさまざまなファイルで、いくつかのプレースホルダの置き換えを実行しています。

sed \
    -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    file2.ldif.template \
    | ldapadd -x -D 'cn=admin,dc=example,dc=com' -W

私が持っている問題は、最後に空行がない場合は、最初のレコードが最後のレコードにリンクされ、ファイル内の他のレコードがfile1.ldif.template少なくとも1つの改行で区切られなければならないことです。file2file1ldif

もちろん、末尾に空白行を追加できますが、file1他の開発者(または編集者)が末尾の改行を削除すると、後で簡単に失敗する可能性があります。

要約すると。現在(簡体字)sed出力:

dn: cn=record1_file1,dc=example,dc=com
cn: record1_file1

dn: cn=record2_file1,dc=example,dc=com
cn: record2_file1
dn: cn=record1_file2,dc=example,dc=com
cn: record1_file2

dn: cn=record2_file2,dc=example,dc=com
cn: record2_file2

望ましい(単純化された)出力:

dn: cn=record1_file1,dc=example,dc=com
cn: record1_file1

dn: cn=record2_file1,dc=example,dc=com
cn: record2_file1

dn: cn=record1_file2,dc=example,dc=com
cn: record1_file2

dn: cn=record2_file2,dc=example,dc=com
cn: record2_file2

私はGNU sedを使用してLinux(fedora 21)で作業しています。移植性は問題ではありません(ただし、私はGNUソリューションよりも移植可能なソリューションを好む)。

ベストアンサー1

GNU sed拡張を使用すると、各ファイル名の後に空の改行を追加できます(行アドレスは、すべての入力を'sと変数-s (--separate)と同様に1つの長いストリームとして処理するのではなく、各ファイル名を参照します)。awkFNRNR

sed \
    -s \
    -e '$a\\' \
    -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    file2.ldif.template \
    | ldapadd -x -D 'cn=admin,dc=example,dc=com' -W

したがって、-swithを使用すると、すべての入力ファイルの末尾に改行文字が-e '$a\\'挿入されます。sed

おすすめ記事