1

У меня есть следующий код Bash:

    echo "Enter an input path"
    read -e input_path

    OLDTEXT="\put(0,0){\includegraphics{/"
    NEWTEXT="\put(0,0){\includegraphics{$input_path/"

    find . -name "*.tex" -print0 | xargs -0  sed -i '$NEWTEXT' -e '$OLDTEXT'

Линия sed всегда выдает ошибку. Эта версия кода выдает следующее сообщение об ошибке:

sed: -e выражение # 1, char 2: неизвестная команда: `O '

Помогите?

2 ответа2

0

Это не имеет смысла: sed -i '$NEWTEXT' -e '$OLDTEXT' - даже если вы правильно использовали двойные кавычки, чтобы переменные могли быть расширены, значения не являются допустимыми командами sed.

Я предполагаю, что вы пытаетесь найти и заменить:

sed -i "s#$OLDTEXT#$NEWTEXT#"
0

Вы должны избежать обратной косой черты:

oldtext='[\]put(0,0){[\]includegraphics{/'
newtext="\\\\put(0,0){\\\\includegraphics{$input_path/"

Кроме того, -i и -e не делают то, что вы ожидаете. Пытаться:

sed "s|$oldtext|$newtext|" file

Если приведенное выше дает то, что вы хотите, то используйте -i чтобы изменить файл на месте:

find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} \;

С GNU find или современной BSD find более эффективно использовать:

find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} +

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .