Что команда linux shell возвращает часть строки?
Я хочу найти команду linux, которая может вернуть часть строки. В большинстве языков программирования это функция substr()
. Имеет ли bash любую команду, которая может быть использована для этой цели. Я хочу, чтобы иметь возможность сделать что-то вроде этого...
substr "abcdefg" 2 3
- печатает cde
.
Последующий аналогичный вопрос:
Ответы
Ответ 1
Если вы ищете утилиту оболочки, чтобы сделать что-то подобное, вы можете использовать команду cut
.
Чтобы взять ваш пример, попробуйте:
echo "abcdefg" | cut -c3-5
что дает
cde
Где -cN-M
сообщает команде cut для возврата столбцов N
в M
включительно.
Ответ 2
Из bash manpage:
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of
parameter starting at the character specified by offset.
[...]
Или, если вы не уверены в наличии bash
, используйте cut
.
Ответ 3
В "чистом" bash у вас есть много инструментов для (под) манипуляций строк, главным образом, но не исключительно в расширении параметров:
${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}
Индексированное расширение подстроки (специальные поведения с отрицательными смещениями и в более новых базах, отрицательные длины):
${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}
И, конечно, много полезных расширений, которые работают на том, является ли параметр нулевым:
${parameter:+use this if param is NOT null}
${parameter:-use this if param is null}
${parameter:=use this and assign to param if param is null}
${parameter:?show this error if param is null}
У них более правильное поведение, чем указано в списке, и, как я уже сказал, существуют другие способы манипулирования строками (общий $(command substitution)
в сочетании с sed или любым другим внешним фильтром). Но их так легко найти, набрав man bash
, что я не чувствую, что это необходимо для дальнейшего распространения этого сообщения.
Ответ 4
В bash вы можете попробовать следующее:
stringZ=abcABC123ABCabc
# 0123456789.....
# 0-based indexing.
echo ${stringZ:0:2} # prints ab
Дополнительные примеры в Проект документации Linux
Ответ 5
expr(1)
имеет подкоманду substr:
expr substr <string> <start-index> <length>
Это может быть полезно, если у вас нет bash (возможно, встроенного Linux), и вам не нужен дополнительный процесс "эха", который вам нужен для использования cut (1).
Ответ 6
${string:position:length}