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'
Я получаю приглашение.
Каков правильный способ сделать это?
Ответы
Ответ 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"