如何删除|从 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-}"
这种情况不需要依赖外部程序。
给定
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-}"
这种情况不需要依赖外部程序。