Назад | Перейти на главную страницу

Как заменить текстовую строку в файле любого типа (например, двоичный и…) и нескольких файлах в Linux?

Я хочу заменить текстовую строку в файле любого типа (например, 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"