Как заменить текстовую строку в любом файле типа (например, бинарный и...) и несколько файлов в 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"