sed с буквальной строкой - не входной файл

97

Это должно быть легко: я хочу запустить 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' 

Я получаю подсказку.

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

амфибия
источник

Ответы:

153

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

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

При использовании , вы тоже можете ( <<<это а here-string):

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

но нет

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

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

ИЗМЕНИТЬ :

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

echo string | sed ...
Жиль Кено
источник
1
странно, у меня не работает ... понимаю, что это было недавно опубликовано, но странное осуждение, если это проблема
superhero
10

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

echo "A,B,C" | sed s/,/\',\'/g
ферранты
источник
5

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

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

input="This has a backslash \\"

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

echo "$output"
фьятт
источник