繁体   English   中英

Shell分隔符在最后一个之前

[英]Shell cut delimiter before last

我正在尝试剪切一个字符串(文件名),其中必须在名称中获取一个变量。 但是问题是,我必须将其放入shell变量中,直到现在还可以。

这是我必须做的例子。

NAME_OF_THE_FILE_VARIABLEiWANTtoGET_DATE
NAMEfile_VARIABLEiWANT_DATE
NAME_FILE_VARIABLEiWANT_DATE

我想要的变量的位置始终可以更改,但是在最后一个位置始终为1。 分隔符是“ _”。

有没有一种方法可以计算数组的大小以获得size-1或类似的值?

OBS:当我切弦时,我总是使用类似的东西:

 VARIABLEiWANT=`echo "$FILENAME" | cut 1 -d "_"`
awk -F'_' '{print $(NF-1)}'  file

或者你有一个字符串

awk -F'_' '{print $(NF-1)}'  <<< "$FILENAME"

将上述oneliner的输出保存到变量中。

IFS=_ read -a array <<< "$FILENAME"
variable_i_want=${array[${#array[@]}-2]}

视觉上有点混乱,但是比开始新流程更有效。 ${#array[@]}是从FILENAME读取的元素数,因此数组的索引范围是0到${#array[@]}-1

但是,从bash 4.3开始,您可以使用负索引而不是对其进行计算。

variable_i_want=${array[-2]}

如果需要POSIX兼容性(无数组),则

tmp=${FILENAME%_${FILENAME##*_}} # FILENAME with last field removed
variable_i_want=${tmp##*_}       # last field of tmp

刚得到它...我发现有人在使用cat函数...我必须将它与echo一起使用...并进行修订。 不了解rev的内容,但我认为它还原了定界符的顺序。

CODIGO=`echo "$ARQ_NAME" | rev | cut -d "_" -f 2 | rev `

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM