Найти содержимое одного файла в другом и заменить на FF

Проблема, с которой вы столкнулись, вызвана неправильной настройкой в ​​вашем файле .bash_profile/ .bashrc.

Одна из переменных оболочки PS1или PROMPT_COMMANDсодержит вызов prompt_git, который не является (в этой точке )в вашем PATH. PS1определяет подсказку, которую вы видите в терминале, а PROMPT_COMMANDзапускается каждый раз, когда отображается подсказка.

0
09.04.2020, 03:18
1 ответ

Вы можете использовать xxdдля своего приложения.
Для обработки бинарного файла вам потребуется несколько шагов:

#!/bin/bash
file_orig="rockx.dat"
file_subst="rockx_0.pmf"
# could use tmpfile here
tmp_ascii_orig="rockx.ascii"
tmp_ascii_subst="subst.ascii"

# convert files to ascii for further processing
xxd -p "${file_orig}" "${tmp_ascii_orig}"
xxd -p "${file_subst}" "${tmp_ascii_subst}"

# remove newlines in converted files to ease processing
sed -i ':a;N;$!ba;s/\n//g' "${tmp_ascii_orig}"
sed -i ':a;N;$!ba;s/\n//g' "${tmp_ascii_subst}"

# create a 0xff pattern file for pattern substitution
ones_file="ones.ascii"
dd if=<(yes ff | tr -d "\n") of="${ones_file}" count="$(($(stat -c %s "${tmp_ascii_subst}") - 1))" bs=1

# substitute the pattern in the original file
sed -i "s/$(cat "${tmp_ascii_subst}")/$(cat "${ones_file}")/" "${tmp_ascii_orig}"

# split the lines again to allow conversion back to binary
sed -i 's/.\{60\}/&\n/g' "${tmp_ascii_orig}"

# convert back
xxd -p -r "${tmp_ascii_orig}" "${file_orig}"

Дополнительную информацию о замене новой строки см. здесь .
Для получения дополнительной информации о создании файла шаблона см. здесь .
Информацию о разделении строк смотрите здесь .
А информацию о xxdможно найти на странице руководства.

Обратите внимание, что это относится только к одной замене шаблона, но должна быть возможность изменить это, чтобы без особых усилий обслуживать несколько замен с несколькими файлами.

1
28.04.2021, 23:18

Теги

Похожие вопросы