I am trying to strip out certain characters from a string on both (left & right) sides. For example, line=see@hear|touch, i only want to echo the "hear" part. Well i have tried this approach:
Sorry for that. Let me clarify.
First, i want to get the word "hear" from this string: see@hear|touch
I tried stripping first the left part ("see@") then the right part ("|touch") leaving me with only what i wanted... "hear" but, it took me a couple of lines of codes to do this. Now are there any ways to do it in only a single line of code?
Second, I want to separate each word in the string and put them into separate variables.
from
see@hear|touch|smell
to
string1=see
string2=hear
string3=touch
string4=smell
*removed separators @ and |. btw, i have to use | as a separator as it was the one instructed for me to use.
...can you suggest anything on how to do this with minimal lines of code?
It depends on where you get the input string from and what the separators are. If | is in the set it's tricker, but in general, to split on a set of characters, you can use set -- with IFS set to the token splitting characters. That's what I continue to suggest.
vnix$ IFS=@
vnix$ set -- `echo see@hear@touch@smell`
vnix$ echo $#
4
vnix$ echo $1
see
vnix$ echo $4
smell
vnix$ echo "$@"
see hear touch smell
I don't know how to make it any clearer than that. Now "see" is in $1, "hear" is in $2, "touch", in $3, and "smell" in $4. I think that satisfies your requirement.
If you are reading an input string from the terminal then you can add | to the set of splitting characters no problem, but you can't use it directly in a script because it's already a command separator (for setting up pipelines, no less).