Сделать один вызов sed
, который пишет сценарий sed, а другой использовать его? Если ваши списки находятся в файлах listA
и listB
, то:
paste -d : listA listB | sed 's/\([^:]*\):\([^:]*\)/s%\1%\2%/' > sed.script
sed -f sed.script files.to.be.mapped.*
Я делаю несколько широких предположений о том, что «слова» не содержат ни двоеточия, ни символов процента, но вы можете адаптироваться к этому. Некоторые версии sed
имеют верхние границы количества команд, которые могут быть указаны; если это проблема из-за того, что ваши списки слов достаточно велики, то вам, возможно, придется разделить сгенерированный скрипт sed на отдельные файлы, которые будут применены, или перейти на использование чего-либо без ограничений (например, Perl).
Еще один момент, о котором следует помнить, это последовательность изменений. Если вы хотите поменять местами два слова, вам нужно тщательно составить свой список слов. В общем, если вы отображаете (1) wordA в wordB и (2) wordB в wordC, имеет значение, выполняет ли скрипт sed отображение (1) до или после преобразования (2).
Показанный скрипт не заботится о границах слов; вы можете быть осторожны с ними различными способами, в зависимости от используемой вами версии sed
и ваших критериев того, что составляет слово.