Chciałbym wymienić $fileWithPath
w $file
, jednak to nie działa, bo (chyba) ścieżka nie uciekł. Jak uciec?
sed -i 's/${fileWithPath}/HAHA/g' $file
sed -i 's|'$fileWithPath'|HAHA|g' file
Pojedyncze cudzysłowy definiują literał łańcuchowy. Umieszczenie zmiennej poza literałem pozwala powłoce rozwinąć tę część.
Ponadto: jeśli zamierzasz analizować ścieżki, użyj separatora w poleceniu sed, który nie myli się z ogranicznikiem katalogu „/”.
$fileWithPath
zawiera spacje, wstawiany jest niewłaściwy wzór.sed -i 's|auth-user-pass nordvpn.txt|auth-user-pass /etc/openvpn/nordvpn.txt|g' *.ovpn
wydaje się działać.W okolicznościach, w których zastępujący ciąg lub ciąg wzorca zawierają 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 hash # - najlepszy wybór znaku ograniczającego będzie często zależeć od typu przetwarzanego pliku. W twoim przypadku możesz spróbować
Znak „g” po ostatnim # służy do zmiany wszystkich wystąpień w pliku, jeśli trzeba zmienić tylko pierwsze wystąpienie, a następnie usunąć „g”.
źródło
Lepszy sposób na dosłowne ciągi znaków z ukośnikami:
źródło