Как выполнить функцию Mid в Bash

Я пытаюсь разобрать текст строки в bash, в который затем могу добавить выделение регистра, но у меня возникла самая большая проблема, пытаясь понять, как это сделать. В VB я знаю это очень просто

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 

Кажется, я не могу найти ничего, что показывает, как я могу выполнять функцию манипуляции со строками, которая эквивалентна функции Mid. Я использую sedЯ не верю, что могу использовать awk или же cut так как я не пытаюсь обрезать строку на основе шаблона, но, конечно, это должно быть так же просто в Unix.

2 ответа

Решение

Я не уверен, что понимаю ваш вопрос, так как думаю, что "cut" будет работать так, как вы этого хотите.

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
someString="Hey there"
case "${someString:0:5}" in
    "Hey t" ) echo Do something ;;
    "Go aw" ) echo Do something else ;;
    * )       echo unrecognized  ;;
 esac

Это также легко можно сделать с помощью if, elif, else. ${SomeString:0:5} является расширением параметра. Узнайте больше из его раздела в руководстве по bash, а также из часто задаваемых вопросов Gregs Bash # 73.

Обратите внимание на другой ответ, который использует вырезать. Оба будут работать, однако расширение параметров происходит быстрее, потому что оно встроено в bash и считается лучшим кодом. Cut будет хорошо для резки нескольких строк текста.

Другие вопросы по тегам