什么linux shell命令返回字符串的一部分?

时间:2008-10-20 18:33:34

标签: linux string bash substr

我想找一个可以返回字符串一部分的linux命令。在大多数编程语言中,它是substr()函数。 bash是否有任何可用于此目的的命令。我希望能够做到这样的事...... substr "abcdefg" 2 3 - 打印cde


随后的类似问题:

6 个答案:

答案 0 :(得分:158)

如果您正在寻找shell实用程序来执行类似操作,可以使用cut命令。

举个例子,试试:

echo "abcdefg" | cut -c3-5

产生

cde

-cN-M告诉cut命令将列N返回到M,包括在内。

答案 1 :(得分:93)

来自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

答案 2 :(得分:32)

In" pure" bash你有很多用于(子)字符串操作的工具,主要是但不限于parameter expansion

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

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

${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可以很容易地找到它们,我觉得进一步扩展这篇文章是不值得的。

答案 3 :(得分:19)

在bash中你可以试试这个:

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

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

The Linux Documentation Project

中的更多样本

答案 4 :(得分:13)

expr(1)有一个substr子命令:

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

如果您没有bash(可能是嵌入式Linux)并且您不希望使用cut(1)需要额外的“echo”过程,这可能很有用。

答案 5 :(得分:6)

${string:position:length}