Вот модифицированная версия вашего скрипта:
#!/bin/bash
while IFS= read -r line; do
sed "s/\bXXX\b/$line/g" < file2.txt > "File2_$line.txt"
done < file1.txt
С file1.txt
и file2.txt
, определенными как в вашем вопросе, он записывает от File2_AAA.txt
до File2_DDD.txt
, с (например) File2_BBB.txt
, содержащий:
This is the first line:
This is the 2nd line: Some Text Some Text A=BBB
This is the 3rd line: Some Text Some
This is the 4th line: Some Text Some K_XXX Some Text Some
This is the 5th line: DXXX
Обратите внимание, что только первое вхождение XXX
заменяется из-за \b
утверждений о границе слов в регулярном выражении.
Были две проблемы с оригинальный сценарий. Во-первых, он использовал sed -i
для замены одного и того же файла, а не для создания нового, как было отмечено в комментарии.
Второй - это одинарные кавычки в аргументе sed
, что предотвращает расширение $line
. Вместо этого я использовал двойные кавычки.