我想找一个可以返回部分字符串的linux命令。在大多数编程语言中,它是substr()
函数。bash是否有任何可用于此目的的命令。我想做这样的事情...substr "abcdefg" 2 3
-打印cde
。
随后的类似问题:
发布于 2008-10-20 18:39:36
如果您正在寻找一个外壳实用程序来做这样的事情,您可以使用cut
命令。
以您的示例为例,请尝试:
echo "abcdefg" | cut -c3-5
哪一项会产生
cde
其中,-cN-M
告诉cut命令返回列N
到M
,包括N
和M
。
发布于 2008-10-20 18:35:53
从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
。
发布于 2011-11-13 05:16:12
在“纯”bash中,您有许多用于(子)字符串操作的工具,主要但不完全是在parameter expansion中:
${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
可以很容易地找到它们,所以我觉得不值得进一步扩展这篇文章。
https://stackoverflow.com/questions/219402
复制相似问题