如何解决Linux:仅在字符串中查找最后一个'/'的位置
我有这个字符串:
/sandbox/US_MARKETING/COMMON_DATA/BAU/FILES/2020/08/dnb_mi_081420.gz
在不知道其中有多少个'/'的情况下,我希望能够仅将文件读入变量。
我希望能够从行的最后一个'/'开始搜索,并找到文件名'dnb_mi_081420.gz
'。
我想基本上说“找到字符串中的最后一个'/',然后读取它后面的子字符串并将其存储。
所以我知道它看起来像这样:
filename=substr(<position of the last'/'>,<position of first character in last string>)
所以我想找到要查找的最后一个'/'的索引位置的方法。
有人知道那是什么吗?
我也尝试使用basename,不幸的是,我正在通过'hdfs dfs'进行此操作以获取hadoop shell。因此,某些非标准Linux命令(例如basename)不在该词汇表中。我基本上将必须将整个字符串存储在变量中,然后对该变量值进行操作。
解决方法
在bash中,可以使用parameter expansion:
$ {parameter ## word}
单词将被扩展以产生一个模式,并根据下面描述的规则进行匹配(请参见模式匹配)。如果模式与参数的扩展值的开头匹配,则扩展的结果是具有最短匹配模式(“#”情况)或最长匹配模式(“ ##”情况)的参数扩展值删除
示例:
$ s="/sandbox/US_MARKETING/COMMON_DATA/BAU/FILES/2020/08/dnb_mi_081420.gz" && echo ${s##*/}
dnb_mi_081420.gz
$
,
您可以使用-state
子命令以指定格式提取有关文件的信息和统计信息。由于您只需要文件名,因此格式仅为"%n"
hdfs dfs -stat "%n" /path/to/file
这可能比基于原始索引的解决方案昂贵,但不应对性能造成有意义或明显的影响。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。