Подтвердить что ты не робот

Sed с литеральной строкой - не входной файл

Это должно быть легко: я хочу запустить sed для строковой строки, а не для входного файла. Если вам интересно, почему, например, редактирование значений, хранящихся в переменных, необязательно текстовые данные.

Когда я это сделаю:

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

где A, B, C - это буква, который я хочу изменить на A ',' B ',' C

Я получаю

Can't open A,B,C

Как будто он думает, что A, B, C - это файл.

Я попытался выполнить его эхо:

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

Я получаю приглашение.

Каков правильный способ сделать это?

4b9b3361

Ответ 1

У вас есть один конфликт котировок, поэтому используйте:

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

Если вы используете bash, вы можете (<<< - here-string):

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

но не

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

потому что sed ожидает файл в качестве аргумента (ов)

ИЗМЕНИТЬ

если вы используете ksh или любые другие:

echo string | sed ...

Ответ 2

Работает так, как вы хотите:

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

Ответ 3

Моя версия с использованием переменных в bash script:

Найдите любые обратные косые черты и замените их косой чертой:

input="This has a backslash \\"

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

echo "$output"