sed "$(sed 's/^\([^ ]*\) \(.*\)$/s#\1#\2#g/' fileB)" fileA
Внутренний sed
преобразует строки из fileB
в s/<pattern>/<pattern>/g
.
Затем запускается следующий sed с аргументами в качестве выходных данных первого.
Для входного файла fileB
внутренний sed
напечатает:
s#A#(foo,bar,foox,barn,foon)#g
s#B#(cat,dog,sheep,abc)#g
s#C#(cadd,dget,vdhfu,dssu,dfhty,dueit)#g
s#D#(cdfte,shdgt,cdht,ddht,ddh)#g
s#E#(cdc,addge)#g
, который можно передать на внешний sed
для выполнения.
Проверено на jdoodle со следующим:
cat <<EOF >fileA
((A,(B,(C,D))),(E));
((A,B),C),D),(E));
EOF
cat <<EOF >fileB
A (foo,bar,foox,barn,foon)
B (cat,dog,sheep,abc)
C (cadd,dget,vdhfu,dssu,dfhty,dueit)
D (cdfte,shdgt,cdht,ddht,ddh)
E (cdc,addge)
EOF
sed "$(sed 's/^\([^ ]*\) \(.*\)$/s#\1#\2#g/' fileB)" fileA
Я получаю этот вывод:
(((foo,bar,foox,barn,foon),((cat,dog,sheep,abc),((cadd,dget,vdhfu,dssu,dfhty,dueit),(cdfte,shdgt,cdht,ddht,ddh)))),((cdc,addge)));
(((foo,bar,foox,barn,foon),(cat,dog,sheep,abc)),(cadd,dget,vdhfu,dssu,dfhty,dueit)),(cdfte,shdgt,cdht,ddht,ddh)),((cdc,addge)));