Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从结尾到字母的子字符串';unixshell脚本中的索引长度_Shell_Substring - Fatal编程技术网

从结尾到字母的子字符串';unixshell脚本中的索引长度

从结尾到字母的子字符串';unixshell脚本中的索引长度,shell,substring,Shell,Substring,我得说 a=“abc_def ghi_333_31122013_Monthly.pdf” 我需要在shell脚本中从上面的字符串中减去每月和31122013。基本上是从最后一个索引到第一个索引的子串 欢迎任何帮助或建议 使用awk的导航深度: a="abc_def ghi__333_31122013_Monthly.pdf" awk -F '[_.]' '{print $(NF-2), $(NF-1)}' <<< "$a" 31122013 Monthly 使用awk: a=

我得说

a=“abc_def ghi_333_31122013_Monthly.pdf”

我需要在shell脚本中从上面的字符串中减去每月和31122013。基本上是从最后一个索引到第一个索引的子串

欢迎任何帮助或建议

使用awk的导航深度:

a="abc_def ghi__333_31122013_Monthly.pdf"
awk -F '[_.]' '{print $(NF-2), $(NF-1)}' <<< "$a"
31122013 Monthly
使用awk:

a="abc_def ghi__333_31122013_Monthly.pdf"
awk -F '[_.]' '{print $(NF-2), $(NF-1)}' <<< "$a"
31122013 Monthly

如果要删除
\u 31122013\u Monthly
,其中
31122013
是可变的,可以使用如下替代:

$ a="abc_def ghi__333_31122013_Monthly.pdf"
$ echo ${a/_????????_Monthly}
abc_def ghi__333.pdf
另一方面,如果您真的想要:

基本上是从最后一个索引到第一个索引的子串

然后,您可以这样做:

$ echo ${a/_*_}
abcMonthly.pdf
或者,如果您想在
3112103\u Monthly.pdf
之前的
之前切断电源,则可以:

$ echo ${a#*__*_}
31122013_Monthly.pdf

如果要删除
\u 31122013\u Monthly
,其中
31122013
是可变的,可以使用如下替代:

$ a="abc_def ghi__333_31122013_Monthly.pdf"
$ echo ${a/_????????_Monthly}
abc_def ghi__333.pdf
另一方面,如果您真的想要:

基本上是从最后一个索引到第一个索引的子串

然后,您可以这样做:

$ echo ${a/_*_}
abcMonthly.pdf
或者,如果您想在
3112103\u Monthly.pdf
之前的
之前切断电源,则可以:

$ echo ${a#*__*_}
31122013_Monthly.pdf

如果您确实想删除下划线和以下字母标记之间的最后一个八位数序列,直到句号之前,请尝试以下操作

ext=${a##*.}
echo ${a%_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*}.$ext

(这并不完全准确;它将用不带任何内容的下划线替换八位数字的尾部,然后将分机重新固定。)

如果您确实要删除下划线和以下字母标记之间的最后八位数字序列,直到句号之前,请尝试以下操作

ext=${a##*.}
echo ${a%_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*}.$ext

(这并不完全准确;它将用下划线替换八位数字的尾部,然后将分机重新固定。)

可能与“替换为零”中的“减法”重复?或者你的意思是“提取”?这些是完全静态的字符串吗?或者你有类似“下划线之间的最后一个八位数序列”的模式吗?可能与“无替换”中的“减法”重复?或者你的意思是“提取”?这些是完全静态的字符串,还是有“下划线之间的最后八位数字序列”这样的模式?创新答案..超级类似:)创新答案..超级类似:)