sed z literałem - nie plik wejściowy

97

To powinno być łatwe: chcę uruchomić seda z literałem, a nie z plikiem wejściowym. Jeśli zastanawiasz się dlaczego, warto na przykład edytować wartości przechowywane w zmiennych, niekoniecznie dane tekstowe.

Kiedy robię:

sed 's/,/','/g' "A,B,C"

gdzie A, B, C jest literałem, który chcę zmienić na A ”,„ B ”,„ C

dostaję

Can't open A,B,C

Jakby myśli, że A, B, C to plik.

Spróbowałem przekreślić go, aby wywołać echo:

echo "A,B,C" | sed 's/,/','/g' 

Otrzymuję monit.

Jaki jest właściwy sposób, aby to zrobić?

amfibia
źródło

Odpowiedzi:

152

Masz konflikt pojedynczych cudzysłowów, więc użyj:

 echo "A,B,C" | sed "s/,/','/g"

Jeśli używasz możesz też ( <<<jest here-string):

sed "s/,/','/g" <<< "A,B,C"

ale nie

sed "s/,/','/g"  "A,B,C"

ponieważ sedoczekuj pliku (ów) jako argumentu (ów)

EDYCJA :

Jeśli użyjesz lub inne:

echo string | sed ...
Gilles Quenot
źródło
1
dziwne, dla mnie nie działa ... uświadamiam sobie, że to było jakiś czas temu, ale dziwne stwierdzenie, że to jest problem
superbohater
10

Działa tak, jak chcesz:

echo "A,B,C" | sed s/,/\',\'/g
ferranty
źródło
5

Moja wersja używająca zmiennych w skrypcie bash:

Znajdź wszelkie ukośniki odwrotne i zamień na ukośniki:

input="This has a backslash \\"

output=$(echo "$input" | sed 's,\\,/,g')

echo "$output"
phyatt
źródło