Linux. Заменить текст файла на текст из второго файла
Входной файл содержит произвольный текст. Во втором файле содержатся замены слов (2 колонки: 1 - что, 2 - на что меняем). Используя утилиты awk и sed произвести замены, соответствующие второму файлу в первом.
Хорошая задача, но ума не приложу как сделать, прошу помощи
Ответы (1 шт):
раз примеров не приведено, будем исходить из предположения, что «поля» во втором файле разделены символом табуляции. тогда вся конструкция может выглядеть примерно так:
$ sed -f <(sed -r 's/#/\\#/g;s/([^\t]+)\t(.*)/s#\1#\2#g/' файл2) файл1
на таких исходных данных:
$ cat файл1
это исходный текст
$ cat файл2
это #то
текст пример для подражания
получим:
#то исходный пример для подражания
пояснения:
sed -f файл-с-командами входной-файл— прочитать команды для программы sed из файла и применить их к входному файлу<(программа)— это process substitution (не входит в стандарт posix, реализовано в ksh и его последователях)sed -r 's/#/\\#/g;s/([^\t]+)\t(.*)/s#\1#\2#g/' входной-файл— преобразует входной файл в набор команд для программы sed. сначала добавляет обратный слэш перед символом#(чтобы его можно было использовать как разделитель аргументов в командеs), затем два «поля», разделённые символом табуляции, подставляет как первый и второй аргументы командыs. на текущемфайл2результат будет таким:$ sed -r 's/#/\\#/g;s/([^\t]+)\t(.*)/s#\1#\2#g/' файл2 s#это#\#то#g s#текст#пример для подражания#g