Какая команда оболочки linux возвращает часть строки? [дубликат]


этот вопрос уже есть ответ здесь:

Я хочу найти команду linux, которая может вернуть часть строки. В большинстве языков программирования, это . Есть ли у bash какая-либо команда, которая может быть использована для этой цели. Я хочу быть в состоянии сделать что-то вроде этого... substr "abcdefg" 2 3 печать cde.


последующий аналогичный вопрос:

6 77

6 ответов:

если вы ищете программу оболочки, чтобы сделать что-то подобное, вы можете использовать .

, чтобы взять ваш пример, попробуйте:

echo "abcdefg" | cut -c3-5

, который дает

cde

здесь -cN-M говорит команду "вырез", чтобы возвращать столбцы N до M включительно.

С главной страницы bash:

${parameter:offset}
${parameter:offset:length}
        Substring  Expansion.   Expands  to  up  to length characters of
        parameter starting at the character  specified  by  offset.
[...]

или, если вы не уверены в наличии bash рассмотрите возможность использования cut.

в "чистом" bash у вас есть много инструментов для (sub)манипуляции со строками, в основном, но не исключительно в расширения параметр:

${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}

индексированное расширение подстроки (специальные поведения с отрицательными смещениями и, в более новых Башах, отрицательные длины):

${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}

и, конечно же, очень полезные расширения, которые работают на том, является ли параметр null:

${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 что я не считаю, что это заслуживает дальнейшего расширения этого поста.

в bash, вы можете попробовать это:

stringZ=abcABC123ABCabc
#       0123456789.....
#       0-based indexing.

echo ${stringZ:0:2} # prints ab

больше образцов в Проект Документации Linux

expr(1) имеет подкоманду substr:

expr substr <string> <start-index> <length>

Это может быть полезно, если у вас нет bash (возможно, встроенный Linux), и вы не хотите, чтобы дополнительный процесс "Эхо" вам нужно использовать cut(1).

${string:position:length}