Замена строк в файле с использованием шаблонов из другого файла
Мне нужно заменить много строк во многих файлах, используя другой файл с шаблонами (например, база данных строк). Это для анонимизации файлов.
Пример:
Файл № 1:
"Administrator";"512";"Built-in account for administering the computer/domain";"False";"False";"Administrator";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";*
Файл № 2 (файл шаблона):
Guest;user1
Administrator;user2
system;user3
Вывод в файле № 1 должен быть
"user2";"512";"Built-in account for administering the computer/domain";"False";"False";"user2";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";
Поскольку содержимое файла #1 является переменным, использование некоторых регулярных выражений не работает в моем случае. Я пытался использовать grep
для поиска, но это тоже не сработало.
Пока я попробовал этот
find file1.txt -type f -exec sed -f patt.regular {} \;
patt.regular
это так:
s/10.30.8.204/XX.YY.8.204/g
К сожалению, это не работает, у меня есть подозрения, что исходный файл формата file1.txt имеет некоторые проблемы, потому что ничего не произойдет, но когда я удаляю оригинальный файл (file1.txt) и создаю новый, кажется, все в порядке
Есть ли вероятность того, что sed
могут быть проблемы с форматированием?
1 ответ
В оболочке,
for line in $(cat file2.txt); do sed -i "s/$(echo $line | cut -d ';' -f 1)/$(echo $line | cut -d ';' -f 2)/g" file1.txt; done
делает то, что вы хотите. Нужны файлы для вызова file1.txt
а также file2.txt
и проживать в текущем каталоге.
Это делает sed
для каждой строки в file2.txt
,