Я хочу заменить текстовую строку в файле любого типа (например, perl, cgi, text, binary, js и ...) в нескольких папках в Linux.
Как мне это сделать?
Танки.
Проблема с редактированием двоичных файлов состоит в том, что они часто размещаются в определенном формате, при этом положение определенных байтов имеет значение. Поэтому попытка автоматизировать это может быть очень трудной и, вероятно, должна выполняться с помощью инструмента, который понимает формат файла.
Для редактирования текстовых файлов можно использовать следующий сценарий Bash:
#!/bin/bash
while read -r file
do
{
tempfile=$(tempfile) || tempfile=$(mktemp) || { tempfile="/tmp/tmpfile.$$" && touch "$tempfile"; } &&
sed 's/original text/new text/g' "$file" > "$tempfile" &&
mv "$tempfile" "$file"
} || echo "Edit failed for $file"
done < <(find . -type f)
или измените вторую и последнюю строки на:
find . -type f | while
и
done
Если ваша версия sed
можете выполнять редактирование на месте, затем вы можете исключить создание временных файлов (все, что находится между do
и done
выше) и используйте это sed
вместо этого внутри цикла:
sed -i 's/original text/new text/g' "$file"