[英]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.