什么linux的shell命令返回string的一部分?

我想find一个可以返回string的一部分的Linux命令。 在大多数编程语言中,它是substr()函数。 bash是否有任何可用于此目的的命令。 我想能够做这样的事情… substr "abcdefg" 2 3 – 打印cde


随后的类似问题:

  • 在Bash中提取子string

Solutions Collecting From Web of "什么linux的shell命令返回string的一部分?"

如果你正在寻找一个shell工具来做类似的事情,你可以使用cut命令。

以您的示例为例,请尝试:

 echo "abcdefg" | cut -c3-5 

这产生了

 cde 

其中-cN-M指示切割命令返回列NM (含)。

从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

在“纯粹的”bash中,有许多用于(子)字符串操作的工具,主要但不限于参数扩展 :

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

索引子字符串扩展(具有负偏移的特殊行为,在较新的Bashes中,负长度):

 ${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来发现,我觉得不应该进一步延伸这篇文章。

在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}