3

I'm trying parse the text of a string in bash which I then can throw a case selection at, but I'm having the biggest trouble trying to figure how to do it. In VB I know its real easy like

someString = "Hey there"
Select Case Mid(someString,1,5)
 Case "Hey t" 'Do something
 Case "Go aw" 'Do something else
 Case 'Else
  'String is unrecognized
End Select 

I can't seem to find anything that shows how I can do a string manipulation function which is equivalent to the Mid function. Do I use sed, I don't believe I can use awk or cut since I'm not trying to trim a string based upon a pattern, but surely it has to be just as simple in Unix.

mrTomahawk
  • 1,119
  • 1
  • 10
  • 17

2 Answers2

8
someString="Hey there"
case "${someString:0:5}" in
    "Hey t" ) echo Do something ;;
    "Go aw" ) echo Do something else ;;
    * )       echo unrecognized  ;;
 esac

This could also easily be done with an if, elif, else. The ${someString:0:5} is parameter expansion. Learn more from it's section in the bash manual, and also from Gregs Bash FAQ #73.

Notice the other answer that uses cut. Both will work, however Parameter expansion is faster because its builtin to bash and considered better code. cut would be good for cutting across multiple lines of text.

Ian Kelling
  • 2,661
  • 6
  • 23
  • 21
  • +1 for giving what I think is the correct answer: do not toss in another 'cut'. Bash is perfectly able to do substrings by itself. – wzzrd Jun 22 '09 at 12:05
3

I'm not sure I understand your question, since I think 'cut' will work just as you want it to.

someString="Hey there"

case `echo $someString | cut -c1-5` in
    "Hey t") echo Do something ;;
    "Go aw") echo Do something else ;;
    *) echo String is unrecognized ;;
esac
Luke
  • 692
  • 4
  • 6
  • Honestly I liked yours best as I think it's easier to read, but for some reason the code is not work when executed in a bash script. I always get a "String is unrecognized" result. – mrTomahawk May 06 '09 at 10:44
  • I just realized that I was using single quote vice backquotes around the case statement which was causing my issue. I also just learned that your answer would also work i the other shells, so I think yours is actually better. – mrTomahawk May 06 '09 at 15:05