2013-10-25 18 views
3

林相當新的這個替換SED一個詞,所以感謝您的耐心輸出貓在一個時間

我有一個文本文件,與數百名值的話,從我d喜歡填充一個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:*** 

對於這個例子Id喜歡通過example1.txt環和sed,使得第一次遇到「DN :」它可以代替它的‘DN:consumer1’,那麼第二個‘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:* 

我都試過,但它只是通過循環文件並重新放置CES的所有條目與DN:consumer2而不是1,小於2

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等的第一次打擊?

回答

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:*** 
+0

感謝您的 - 我運行它時, 的awk「NR == FNR越來越語法錯誤{A [NR] = $ 0;下一個} $ 1 ==「*** dn:」{$ 1 =「* dn:」a [++ k]} 1'example1.txt ldif2.txt awk:第1行附近的語法錯誤 awk:在第1行附近跳出 有沒有一種運行awk的方式,以便它進行調試? – user2920657

+0

奇怪。它運行在我的系統上。嘗試打破不同行中的每個命令,也許我們可以找到造成麻煩的原因 – user000001

+1

啊哈!我在Solaris上運行它,awk上顯然無法處理它 - 我在AIX上嘗試過它,它工作正常 - 非常感謝! @ user000001 – user2920657