Jak dodać ścieżkę do określonego wiersza pliku za pomocą skryptu bash?

1

Mam następujący kod 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'

Linia sed zawsze powoduje błąd. Ta wersja kodu wyświetla następujący komunikat o błędzie:

sed: -e wyrażenie # 1, char 2: nieznane polecenie: `O '

Wsparcie?

Kok
źródło

Odpowiedzi:

0

Musisz uciec przed ukośnikami:

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

Również, -ia -enie robić to, czego oczekują. Próbować:

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

Jeśli powyższe informacje dają to, czego chcesz, użyj przycisku, -iaby zmienić plik w miejscu:

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

W przypadku GNU findlub nowoczesnego BSD findbardziej wydajne jest użycie:

find . -name '*.tex' -exec sed -i "s|$oldtext|$newtext|" {} +
John1024
źródło
0

Nie ma to sensu: sed -i '$NEWTEXT' -e '$OLDTEXT'- nawet jeśli poprawnie użyłeś podwójnych cudzysłowów, aby zmienne mogły zostać rozwinięte, wartości nie są prawidłowymi poleceniami sed.

Zakładam, że próbujesz wyszukać i zastąpić:

sed -i "s#$OLDTEXT#$NEWTEXT#"
Glenn Jackman
źródło