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

Я хочу заменить текстовую строку в любом типе файла (например, Perl, CGI, текст, двоичный файл, JS и...) в нескольких папках в Linux.

Как мне это сделать?

Танки.

1 ответ

Проблема с редактированием двоичных файлов заключается в том, что они часто располагаются в определенном формате, причем положение определенных байтов имеет значение. Поэтому пытаться автоматизировать это может быть очень сложно, и, вероятно, это следует делать с помощью инструмента, который понимает формат файла.

Следующий скрипт 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"
Другие вопросы по тегам