Вы можете использовать Awk
, обрабатывая оба файла, сохраняя содержимое одного файла в системной памяти, а другое — по мере его повторения.
awk 'FNR==NR{ words[NR]=$0; next}{ if ($0 ~ /^#/) $0 = $0 words[++idx]; print }' rename main
Краткое объяснение того, как это работает
FNR==NR{ words[NR]=$0; next}
работает с первым файлом rename
, индексируя содержимое вашего файла в массиве words
. NR
— это специальная переменная в Awk
, которая отслеживает текущий номер строки. Таким образом, массив становится чем-то вродеwords['1']="yellow", words['2']="white"
{..}
теперь работает со следующим файлом rename
, и если строка соответствует #
, мы обновляем текущую строку $0
, добавляя элемент из созданного массива. print
печатает строку со строкой, добавленной после #
, для тех строк, которые начинаются с нее, и другие строки, такие как -.