Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Bash获取变量中第5和第6下划线之间的文本_Bash_Sed - Fatal编程技术网

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

Bash获取变量中第5和第6下划线之间的文本,bash,sed,Bash,Sed,我有一个名为$folder\u name的变量,其中包含字符串 Release_2019_Config_V6_Standalone_PJ6678_Test 这是文件夹的名称。 我正试图从文件夹名中提取PJ6678。 我知道文件夹名称会将用户id(我需要的文本)放在第5和第6个下划线之间,我不知道第6个下划线后会出现什么文本/符号 我正在使用Bash脚本,如果有人能帮助我使用此功能,我将非常感激,因为我完全无法使用sed(在阅读了几个小时后,我认为这是适合此工作的正确工具?请尝试以下命令: ec

我有一个名为
$folder\u name
的变量,其中包含字符串

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

我正在使用Bash脚本,如果有人能帮助我使用此功能,我将非常感激,因为我完全无法使用sed(在阅读了几个小时后,我认为这是适合此工作的正确工具?

请尝试以下命令:

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

在这里,
\uuu
是分隔符,
$a
是保存该值的变量。

如果需要纯bash解决方案,可以使用标记化文件名,并选择第5个元素

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

IFS=\read-a token这里是一个仅限Bash的解决方案:

#!/bin/bash
INPUT="Release_2019_Config_V6_Standalone_PJ6678_Test"
IFS='_' read -ra IN <<< "$INPUT"
echo ${IN[5]}
!/bin/bash
输入=“发布2019配置V6独立测试PJ6678测试”

为了完整起见,这里有一个纯shell解决方案,它不依赖于像数组这样的
bash
扩展

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

因为
操作符去掉了最短的前缀,这将不允许
*
匹配任何
本身;如果匹配了,我们可以通过使下划线与模式中的一个文本
匹配来缩短前缀。

使用delimeter设置为
。您可以使用
sed
,但是如果它总是在第5和第6下划线之间,那么只需
cut
it。这是什么意思@stephanmg@stephanmg-无意伤害,这种情况经常发生,尤其是在新发布的问题上。是的,我不确定政策是什么。应该删除类似的答案吗?@stephanmg我不确定这张票是否值得花时间。它只会呃,对于“高交通量罚单”。如果我在第一张罚单发布几分钟后再发布,我会删除我自己的几乎重复的答案。基本上,我会问自己“在发布我自己的答案之前,我真的没有机会看到第一个答案吗?”并尝试使用我的最佳判断。如果我看到两个几乎相同的答案,我同样会对这两个都投赞成票(正如我在这里所做的)如果它们之间的间隔不超过几分钟;否则,我只会对第一个进行投票(但不会惩罚迟到的答案,尽管如果它特别晚,我可能会评论它的重复状态)。我也会尝试按照@chepner的步骤进行操作。谢谢。谢谢大家的帮助,真的很感谢。剪切-d'-f-6这是一个很好的技巧!谢谢你发布这篇文章。(我知道#和%运算符,但没有想到以这种方式组合它们)。+1!
awk -F "_" '{ print $6 }' <<< "Release_2019_Config_V6_Standalone_PJ6678_Test"
$ folder_name=Release_2019_Config_V6_Standalone_PJ6678_Test
$ tmp=${folder_name#*_*_*_*_*_}  # Because we know how many _ to strip
$ echo ${tmp%_*}
PJ6678