linux - 用纯 bash 提取字符串中间

标签 linux bash

说我有... string='第一/第二/第三'

如何仅使用纯 bash(不是 awk/sed 等)并在 1 行中从字符串中提取“second”?

我知道我可以做 ${string#*/} 来获得“第二个/第三个”,但只是“第二个”呢

谢谢!

最佳答案

你可以这样做:

#!/bin/env bash

STRING="first/second/third"

TEXT=$STRING
TEXT=${TEXT#*/}
TEXT=${TEXT%/*}

echo $TEXT

Bash 还支持 regex。这在这里以及其他有更复杂需求的地方很有用。对于您的用例,您可以轻松匹配每个部分并提取它。

#!/bin/env bash

STRING="first/second/third"

[[ $STRING =~ ^([^/]*)/([^/]*)/([^/]*)$ ]] && echo matched

echo [1] ${BASH_REMATCH[1]}
echo [2] ${BASH_REMATCH[2]}
echo [3] ${BASH_REMATCH[3]}

关于linux - 用纯 bash 提取字符串中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35049938/

相关文章:

bash - bash 有赋值返回码吗?

git - 在脚本中以编程方式 checkout git 分支

bash - 删除名称为空(不可见)的文件有哪些好方法?

Linux bash脚本: Recurisely delete files if empty based on file format from user input

linux - 关于在亚马逊云 ec2 上设置 git 的虚拟问题

linux - 在嵌入式 qt 项目上校准和配置 evdevtouch

bash - 防止重复项保存在 bash 历史记录中

linux - Unix 表示怀疑 - 对以下程序的执行

c - 在 Linux 上使用 I2C 读取/写入

perl - 使用 bash shell 自动中断由关键字分隔的千兆字节行的最快方法是什么?