Мне часто приходится делать много замен в файлах.Чтобы решить эту проблему, я создал два файла old.text
и new.text
.Первый содержит список слов, которые необходимо найти.Второй содержит список слов, которые должны заменить их.
- Все мои файлы используют UTF-8 и используют различные языки.
Я создал этот скрипт, который я надеялся сделать замену.Сначала он читает old.text
по одной строке за раз, а затем заменяет слова в этой строке в файле input.txt соответствующими словами из файла new.text
.
#!/bin/sh
number=1
while read linefromoldwords
do
echo $linefromoldwords
linefromnewwords=$(sed -n '$numberp' new.text)
awk '{gsub(/$linefromoldwords/,$linefromnewwords);print}' input.txt >> output.txt
number=$number+1
echo $number
done < old.text
Однако мое решение не позволяетхорошо работать.Когда я запускаю скрипт:
- В строке 6 команда
sed
не знает, где заканчивается $number
. - Переменная
$number
меняется на "0+1 ", затем" 0 + 1 + 1 ", когда он должен измениться на" 1 ", затем" 2 ". - Строка с
awk
, похоже, не делает ничего, кроме копированияinput.txt точно такой же, как и output.txt.
У вас есть предложения?
Обновление:
Отмеченный ответ работает хорошо, однако я используюЭтот сценарий много, и это займет много часов, чтобы закончить.Поэтому я предлагаю вознаграждение за решение, которое может выполнить эти замены намного быстрее.Решение в BASH, Perl или Python 2 будет в порядке, при условии, что оно по-прежнему совместимо с UTF-8.Если вы думаете, что какое-то другое решение, использующее другое программное обеспечение, обычно доступное в системах Linux, будет быстрее, то это тоже может быть хорошо, если не требуются огромные зависимости.