我对此很陌生,所以谢谢你的耐心

我有一个包含数百个值的文本文件,我想从中填充一个 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”代替第二个“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:*

我试过这个,但它只是遍历文件并用 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 等上获得第一次命中?

最佳答案

以下是使用 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:***

关于bash - 从文件中输出 Cat 并一次用 sed 替换单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19594463/

10-16 20:17