sed with literal string--not input file

LinuxUnixSed

Linux Problem Overview


This should be easy: I want to run sed against a literal string, not an input file. If you wonder why, it is to, for example edit values stored in variables, not necessarily text data.

When I do:

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

where A,B,C is the literal which I want to change to A','B','C

I get

Can't open A,B,C

As though it thinks A,B,C is a file.

I tried piping it to echo:

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

I get a prompt.

What is the right way to do it?

Linux Solutions


Solution 1 - Linux

You have a single quotes conflict, so use:

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

If using [tag:bash], you can do too (<<< is a here-string):

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

but not

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

because sed expect file(s) as argument(s)

EDIT:

if you use [tag:ksh] or any other ones :

echo string | sed ...

Solution 2 - Linux

Works like you want:

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

Solution 3 - Linux

My version using variables in a bash script:

Find any backslashes and replace with forward slashes:

input="This has a backslash \\"

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

echo "$output"

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionamphibientView Question on Stackoverflow
Solution 1 - LinuxGilles QuenotView Answer on Stackoverflow
Solution 2 - LinuxferrantsView Answer on Stackoverflow
Solution 3 - LinuxphyattView Answer on Stackoverflow