我有一个名为$folder_name
的变量,其中包含字符串
Release_2019_Config_V6_Standalone_PJ6678_Test
这是文件夹的名称。
我正在尝试从文件夹名称中提取PJ6678
。
我知道文件夹名称会将用户ID(我需要的文本)放在第5个和第6个下划线之间,我不知道第6个下划线后会出现什么文本/符号。
我正在使用Bash脚本,如果有人可以使用此功能,我将非常感谢您的帮助,因为我在尝试使用sed时完全迷路了(阅读数小时后,我认为这是适用于该功能的正确工具工作?
答案 0 :(得分:3)
这是仅限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"
答案 1 :(得分:2)
如果您想要纯现金解决方案,则可以使用标记化文件名,并选择第5个元素
IFS=_ read -a token <<< "$folder_name"
id=${token[5]}
消除因每个文件夹名称启动其他程序而导致的依赖性和性能下降。
答案 2 :(得分:1)
尝试以下命令:
echo $a | awk -F'_' '{print $6}'
在这里,_
是定界符,$a
是保存该值的变量。
答案 3 :(得分:1)
为完整起见,这是一个不依赖数组的bash
扩展的纯壳解决方案。
$ folder_name=Release_2019_Config_V6_Standalone_PJ6678_Test
$ tmp=${folder_name#*_*_*_*_*_} # Because we know how many _ to strip
$ echo ${tmp%_*}
PJ6678
由于#
运算符去除了最短前缀,因此不允许*
匹配任何_
本身;如果确实如此,我们可以通过使下划线匹配模式中文字_
之一来缩短前缀。