Próbuję napisać następujący skrypt bash:
HOME_DIR=/opt/my_home
find ./CONFIG -type f -exec sed -i "s/_HOME_DIR_/$_HOME_DIR/g" {} \;
Wiersz, który chcę zmienić w plikach, brzmi:
users = "_HOME_DIR_/config/data/_DOMAIN_/users.conf"
Tak więc wynikiem końcowym musi być:
users = "/opt/my_home/config/data/_DOMAIN_/users.conf"
Ale nie rozumiem tego ... Myślę, że to z powodu znaków ucieczki ...
Czy ktoś może rzucić nieco światła?
Dzięki
command-line
scripts
sed
Felipe Caldas
źródło
źródło
Odpowiedzi:
W okolicznościach, w których ciąg zastępujący lub ciąg wzorcowy zawiera ukośniki, możesz skorzystać z faktu, że GNU sed zezwala na alternatywny ogranicznik dla polecenia zastępczego. Typowe opcje dla separatora to znak potoku
|
lub skrót#
- najlepszy wybór separatora często zależy od typu przetwarzanego pliku. W twoim przypadku możesz spróbowaćZauważ też, że źle wpisałeś nazwę zmiennej $ HOME_DIR (nie zaczyna się od znaku podkreślenia).
Po prostu możesz chcieć unikać używania wielkich liter dla zmiennych użytkownika w skrypcie - powinny być one zarezerwowane dla zmiennych systemowych. Również
g
zmiana nie jest konieczna, chyba że chcesz dokonać wielu zamian w jednym wierszu.źródło
Kodowanie na stałe zmiennej „opt / home” będzie działać w ten sposób ..
źródło