У меня есть файловая структура, в которой у меня есть 700 каталогов. Все каталоги имеют файл с именем config.xml
. У меня есть префикс 25 каталогов с именем 1111-
. Теперь я хочу заменить блок кода в файлах config.xml
из всех этих 25 каталогов. Я хочу иметь петлю (for
или while
).Bash - Найти и заменить строку в файле в количестве каталогов
ответ
Вы можете найти файл с find
, grep
Директории и заменить строку, используя sed
.
find . -iname 'config.xml' | grep '1111' | sed -i 's/STRINGTOREPLACE/NEWSTRING/'
Что делать, если файл config находится в подкаталоге одной из этих 1111 папок. grep получил бы это тоже, и я не думаю, что @Drew этого хочет. –
hmm. в этом случае можно использовать параметр -depth. – OhadBasan
Возможно, 'ls 1111 - */config.xml' проще, чем' find ... ' –
Я хотел бы использовать рекурсивную функцию:
folder_recursive() {
for i in "$1"/*;do
if [ -d "$i" ];then
folder_recursive "$i"
elif [ -f "$i" ]; then
lastFolder = ${$1##*/}
if [[ $lastFolder == *"1111-"* ]]; then
if [[ $i == *"config.xml" ]]; then
#Replace block of code
file_path=$i
original=$(<file_path) # Read from file
to_replace="aaaabbbb"
replacer="xxxxyyyy"
result=${original/$to_replace/$replacer} #This will replace the first instance of to_replace
# If you want to replace all instances use:
# ${original//$to_replace/$replacer}
echo $result > $i #Overwrite file
fi
fi
fi
done
}
path= "root/of/folder/structure"
folder_recursive $path
Как это рекурсивная функция? – NinjaGaiden
извините опечатку в коде –
@Luca: Я не уверен, как это заменит код. Когда я собираюсь рассказать этой функции о поиске конкретной строки (-ов) кода, а затем заменить ее на новую! Пожалуйста, черт! – Drew
Попробуйте это:
find . -name "1111-*" -type d -exec cd {} \; -exec /absolute.path/to/shell_script_modifying_config.xml \;
Я не использую grep. Команда find, которую я предоставил, ищет каталоги, начиная с 1111-. Затем он записывается в эти каталоги и запускает сценарий оболочки. Поэтому он не попадает в подкаталоги 1111-папок. –
- 1. Найти и заменить строку в параметре bash
- 2. Найти и заменить строку в текстовом файле
- 3. найти строку в файле с помощью bash
- 4. Bash SED, чтобы заменить строку в файле
- 5. Заменить строку в файле из сценария bash
- 6. найти и заменить в файле или строке в bash
- 7. Заменить строку в большом количестве файлов
- 8. Заменить строку в файле
- 9. как найти/заменить строку в файле
- 10. найти в файле и заменить
- 11. найти и заменить в файле
- 12. Заменить строку в текстовом файле
- 13. Bash найти и заменить запись в файле awk
- 14. Найти и заменить текст в файле на OSX/bash
- 15. Найти и заменить - bash
- 16. Найти и заменить строку в текстовом файле в perl
- 17. Заменить строку в файле
- 18. Заменить строку в файле
- 19. Заменить строку в файле
- 20. Найти и заменить строку в сценарии bash с помощью SED
- 21. Заменить строку в файле
- 22. найти и заменить в файле xml
- 23. найти строку в файле на сервере и заменить ее
- 24. Как найти и заменить строку в текстовом файле?
- 25. Найти строку и заменить определенные буквы в пакетном файле
- 26. Как найти и заменить строку данных в текстовом файле C++
- 27. Как найти строку в текстовом файле и заменить ее?
- 28. Powershell найти файл и заменить строку в файле рекурсивно
- 29. Найти слово и заменить целую строку в текстовом файле
- 30. найти и заменить строку в файле с использованием СЭД
Что написано до сих пор? – codeforester