3

私はこれにかなり慣れていないので、しばらくお待ちいただきありがとうございます

何百もの値を含むテキスト ファイルがあり、そこから ldif テンプレートを作成したいと考えています。たとえば、ファイルexample1.txtには

**Consumer1**

**Consumer2**

そしてldif.txtには

***dn: ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:***

***dn: ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:***

この例では、example1.txt と sed をループして、最初に "dn:" に遭遇したときにそれを "dn:consumer1" に置き換え、次に 2 番目の "dn:consumer2" などに置き換えます。後はこんな感じに

*dn:**consumer1** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:*

*dn:**consumer2** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:*

私はこれを試しましたが、ファイルをループして、すべてのエントリを 1 ではなく 2 ではなく dn:consumer2 に置き換えます。

for i in `cat example1.txt`
do
sed "s/dn:/dn: $i/" ldif.txt > hello.txt
done

これは以下を出力します

*dn:**consumer2** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:*

*dn:**consumer2** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:*

最初のヒットなどを得るために、段階的にループして前後に置換する方法はありますdn:consumer1, 2nd hit dn:consumer2か?

4

1 に答える 1

3

awkでそれを行う方法は次のとおりです。

$ awk 'NR==FNR{a[NR]=$0;next}$1=="***dn:"{$1="*dn:"a[++k]}1' example1.txt ldif.txt 
*dn:**Consumer1** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:***

*dn:**Consumer2** ,cn=Insert,o=Insert
uid:
userPassword:
objectclass: top
objectclass: inetOrgPerson
objectclass: person
objectclass: organizationalPerson
businessCategory:
sn:
cn:***
于 2013-10-25T16:12:53.307 に答える