如何删除|从 bash 中减去目录名称?

How to remove | substract directory name from bash?

给定

DIRNAME_MAIN="/home/vMX-ENV/vMX-21.1R1/"

我想只显示上面目录中的 21.1R1,有什么方法可以只显示 home/vMX-ENV/vMX- 之后的值吗?并在末尾删除 /,这样它就不再是 21.1R1/,而是:21.1R1?

谢谢!

使用sed分组和反向引用

$ sed 's/[^0-9]*\([^/]*\).*//' input_file
21.1R1

/[^0-9]* - 排除直到下一个数字字符出现的任何内容。由于这部分不在要分组的括号()内,因此将被排除。

\([^/]*\) - 这会将所有内容分组,从第一个数字到 / 斜杠的下一个数字。

.*/ - 排除所有其他内容

</code> - Return 具有反向引用的组 <code>.

awk也可以用

$ awk -F"[/-]" '{print }' input_file
21.1R1

-F"[/-]" - 将分隔符设置为 /- 然后打印第 6 列,其中将包含字符串。

Bash 有各种各样的内置机制来操纵变量的值。当前问题特别令人感兴趣的是 parameter expansion 形式,它删除匹配指定 shell 模式的前缀或后缀。例如:

# Remove any trailing slash and store the result in DIRNAME_NORM
DIRNAME_NORM=${DIRNAME_MAIN%/}

# Emit the value of $DIRNAME_NORM, less the longest prefix matching shell
# pattern *vMX-
echo "${DIRNAME_NORM##*vMX-}"

这种情况不需要依赖外部程序。