В скрипте bash,
У меня есть строка, которая содержит несколько слов, разделенных одним или несколькими пробелами. то есть:
Name Age Sex ID Address
Если я хочу найти какое-либо слово, например, я хочу найти индекс слова «Возраст», как я могу это сделать?
Есть ли какая-нибудь команда, которая будет возвращать порядковый номер слова, которое я хочу напрямую?
Спасибо.
Ответы:
Bash выполняет разбиение слов по строкам само по себе - на самом деле, чаще всего, избегая этой проблемы, а цитирование причины так важно. Это легко использовать в вашем случае: просто поместите вашу строку в массив без кавычек - bash будет использовать разбиение слов для разделения отдельных элементов. Предполагая, что ваша строка хранится в переменной
$str
,вернет массив из 5 элементов. Индекс вашего массива - это индекс вашего слова (считая от 0, как в большинстве языков сценариев и программирования), т.е. к «Возрасту» обращаются с помощью
или, если вам нужно найти индекс элемента по содержимому, выполните цикл по массиву, т.е.
источник
Замените * Age with Age - это удалит что-либо до "Age":
Получите что-нибудь до "возраста"
Получите длину этой строки (которая является индексом «возраста»):
источник
export L='debug info warn error'; export GTE='warn'; echo ${L/*${GTE}/${GTE}}
выводит сообщение «error error»Если вам не нужно строго использовать bash, но вы можете использовать другие программы, обычно встречающиеся в системах с bash, тогда вы можете использовать что-то вроде этого:
Python начинает индексирование строк с нуля, поэтому я добавил +1 в конец команды.
источник
Вы можете использовать родное регулярное выражение Bash
Вывод
источник
Примечание . Предполагается, что здесь под индексом подразумевается, что вы хотите знать, какое это слово (начиная с 0), а не какой символ в строке начинается с этого слова. Другие ответы касаются последнего.
Не то, чтобы я знал, но вы можете сделать один. Два трюка:
Код:
источник
Попробуйте следующий oneliner javascript в оболочке (используйте оболочку javascript):
Или с документом здесь:
источник
Я нашел решение, которое отлично работает.
Он работает аналогично функции indexOf () в Java, которая возвращает первое вхождение входной строки.
Нашел это решение здесь http://www.linuxquestions.org/questions/linux-newbie-8/bash-string-manipulation-help-670627/ (последнее сообщение). Этот парень спас мой день. Отдайте ему.
Более быстрый способ, если вы хотите сделать подстроку из первого indexof.
/programming/10349102/shell-script-substring-from-first-indexof-substring
источник
Если доступны coreutils, вы можете сделать это следующим образом:
В соответствии с запросом MariusMatutiae я добавляю объяснение, как работает эта трехэтапная операция:
Для ссылок, пожалуйста, проверьте:
http://www.tldp.org/LDP/abs/html/parameter-substitution.html (см. «Расширение переменной / замена подстроки»)
http://www.gnu.org/software/coreutils/manual/coreutils .html (перейти к: «Команда вырезания» и «вызов wc»
источник
Сочетание двух ранее заданных ответов с использованием чистых массивов bash и замены подстрок.
Идея состоит в том, чтобы получить строку всех слов перед тем, которое вы хотите, а затем подсчитать количество слов в этой подстроке, превратив ее в массив.
Конечно, возраст можно сохранить в другой переменной
needle
, а затем использовать${haystack%$needle*}
. Ожидайте проблем, если искомое слово является подмножеством другого слова, и в этом случае ответ Копишке все еще работает.источник
Это 7-летний вопрос, но некоторые могут нуждаться в ответе в чистом виде.
источник