Sed
может не подходить для случая, когда вы хотите изменить подстановку для каждого вхождения.Если мое понимание вашего требования верно, сработает следующее:
awk 'FNR==NR {orgkey[++i]=$0; next}
{print gensub(/<n3:CustId>[^<]*<\/n3:CustId>/,"<n3:CustId>" orgkey[++j] "</n3:CustId>", "g")} ' orgkey.txt CAMBIOMINI1.txt
, где orgkey.txt
содержит список замен:
orgkey_a
orgkey_b
orgkey_c
orgkey_d
и CAMBIOMINI1.txt
будут выглядеть так:
<n3:CustId>id1</n3:CustId>
<n3:CustId>id2</n3:CustId>
<n3:CustId>id3</n3:CustId>
<n3:CustId>id4</n3:CustId>
, тогда результат будет:
<n3:CustId>orgkey_a</n3:CustId>
<n3:CustId>orgkey_b</n3:CustId>
<n3:CustId>orgkey_c</n3:CustId>
<n3:CustId>orgkey_d</n3:CustId>
Обратите внимание, что он не предполагает, что тег в CAMBIOMINI1.txt
появляется несколько раз в той же строке, что и:
<n3:CustId>id1</n3:CustId> <n3:CustId>id2</n3:CustId>
<n3:CustId>id3</n3:CustId>
<n3:CustId>id4</n3:CustId>
В этом случае используйте вместо этого версию Perl:
perl -nle 'if (@ARGV) {push(@orgkey, $_); next}
s#<n3:CustId>.*?</n3:CustId>#"<n3:CustId>" . $orgkey[$j++] . "</n3:CustId>"#ge; print' orgkey.txt CAMBIOMINI1.txt