Bash在变量中的第5至第6下划线之间获取文本

我有一个名为$folder_name的变量,其中包含字符串

Release_2019_Config_V6_Standalone_PJ6678_Test

这是文件夹的名称。 我正在尝试从文件夹名称中提取PJ6678。 我知道文件夹名称会将用户ID(我需要的文本)放在第5个和第6个下划线之间,我不知道第6个下划线后会出现什么文本/符号。

我正在使用Bash脚本,如果有人可以使用此功能,我将非常感谢您的帮助,因为我在尝试使用sed时完全迷路了(阅读数小时后,我认为这是适用于该功能的正确工具工作?

atx860 回答:Bash在变量中的第5至第6下划线之间获取文本

这是仅限Bash的解决方案:

#!/bin/bash
INPUT="Release_2019_Config_V6_Standalone_PJ6678_Test"
IFS='_' read -ra IN <<< "$INPUT"
echo ${IN[5]}

或使用剪切:

cut -d '_' -f 6 <<< "Release_2019_Config_V6_Standalone_PJ6678_Test"

或使用awk:

awk -F "_" '{ print $6 }' <<< "Release_2019_Config_V6_Standalone_PJ6678_Test"
,

如果您想要纯现金解决方案,则可以使用标记化文件名,并选择第5个元素

IFS=_ read -a token <<< "$folder_name"
id=${token[5]}

消除因每个文件夹名称启动其他程序而导致的依赖性和性能下降。

,

尝试以下命令:

echo $a | awk -F'_'  '{print $6}'

在这里,_是定界符,$a是保存该值的变量。

,

为完整起见,这是一个不依赖数组的bash扩展的纯壳解决方案。

$ folder_name=Release_2019_Config_V6_Standalone_PJ6678_Test
$ tmp=${folder_name#*_*_*_*_*_}  # Because we know how many _ to strip
$ echo ${tmp%_*}
PJ6678

由于#运算符去除了最短前缀,因此不允许*匹配任何_本身;如果确实如此,我们可以通过使下划线匹配模式中文字_之一来缩短前缀。

本文链接:https://www.f2er.com/3159317.html

大家都在问