Извлечь первое слово строки в bash с помощью регулярных выражений - PullRequest
0 голосов
/ 04 марта 2020

У меня есть строка типа "ab c def". Используя Bash и регулярные выражения, я хочу установить переменную Bash в значение первого слова. Я пробовал следующий код:

testVar="abc def"
re="^[[:space]]([a-zA-z0-9)[[[:space]]|$]"
sub=[[ "$testVar" ~= ${re} ]]; ${BASH_REMATCH[0]}
echo "${sub}"

Это дает мне ответ "./test1.sh: строка 3: ab c def: команда не найдена". Любые предложения о том, что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 04 марта 2020

Вот простое решение с использованием read:

testVar="abc def"
read word _ <<< "$testVar"
echo "$word"

abc

Если вы действительно хотите использовать регулярное выражение, используйте:

re='[^[:blank:]]+'
[[ $testVar =~ $re ]] && echo "${BASH_REMATCH[0]}"

abc

Здесь [^[:blank:]]+ соответствует 1 или более любым непробельным символам.

1 голос
/ 04 марта 2020

Другое:

$ echo ${testVar%% *}
abc

Подробнее здесь: https://www.tldp.org/LDP/abs/html/parameter-substitution.html

0 голосов
/ 04 марта 2020

Если ваша строка не разделена пробелом. Вы можете использовать sed, чтобы разбить строку на новую строку для каждого разделителя, и использовать head, чтобы выбрать только первую строку.

$ testVar="abc,def,ghi"
$ echo $testVar | sed 's/,/\n/g' | head -n 1
abc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...