Pytanie Czy mogę używać sed do manipulowania zmienną w bash?


W moim programie chciałbym najpierw uzyskać dane wejściowe od użytkownika i wstawić \ przed każdym / więc to piszę, ale to nie działa.

echo "input a website"
read website

sed '/\//i\/' $website

29
2017-07-19 08:01


pochodzenie




Odpowiedzi:


Spróbuj tego:

website=$(sed 's|/|\\/|g' <<< $website)

Bash faktycznie obsługuje tego rodzaju wymianę natywnie:

${parameter/pattern/string} - zastąp pierwszy mecz pattern z string.
${parameter//pattern/string} - Zastąp wszystkie mecze z pattern z string.

W związku z tym możesz:

website=${website////\\/}

Wyjaśnienie:

website=${website // / / \\/}
                  ^  ^ ^  ^
                  |  | |  |
                  |  | |  string, '\' needs to be backslashed
                  |  | delimiter
                  |  pattern
                  replace globally

69
2017-07-19 08:05



natywna wersja nie działa dla mnie z dużą zmienną zawartością command to long: - Artistan


echo $website | sed 's/\//\\\//g'

lub, dla lepszej czytelności:

echo $website | sed 's|/|\\/|g'

9
2017-07-19 08:07



działa również dobrze. Czy mógłbyś wyjaśnić, że to / \ // \\\ // g 'i this' / | \\ / | g '?? - Leo Chan
searchreplacecommand|source|target|global(all matches) gdzie możesz użyć dowolnego znaku jako separatora (|). tradycyjnie / służy do separatora - Karoly Horvath
jednak gdy używam "" i zmiennej. nic nie wstawia. Czy potrafisz zrozumieć przyczynę? dzięki - Leo Chan
dzięki. Poprosiłem o to w innym poście na temat czytelności - Leo Chan