Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 如何在shell脚本中从字符串中删除特定键_Bash_Shell_Unix - Fatal编程技术网

Bash 如何在shell脚本中从字符串中删除特定键

Bash 如何在shell脚本中从字符串中删除特定键,bash,shell,unix,Bash,Shell,Unix,我需要从字符串中删除一个以下划线作为后缀或前缀的特定键,并需要将新字符串存储到变量中。此键可能出现在字符串的开头或结尾处,或者介于两者之间,带有下划线,并且字符串可能包含特殊字符 String Result AA_B_676.csv.gz AA_B.csv.gz 676_AA_B.csv.sgnl AA_B.csv.sgnl AA_B.csv_676 AA_B.csv AA_B.csv.sgnl_676 AA_B.csv.sgnl 您可以

我需要从字符串中删除一个以下划线作为后缀或前缀的特定键,并需要将新字符串存储到变量中。此键可能出现在字符串的开头或结尾处,或者介于两者之间,带有下划线,并且字符串可能包含特殊字符

String              Result
AA_B_676.csv.gz     AA_B.csv.gz
676_AA_B.csv.sgnl   AA_B.csv.sgnl
AA_B.csv_676        AA_B.csv
AA_B.csv.sgnl_676   AA_B.csv.sgnl

您可以使用变量替换:

${var/pattern/replace}
范例

输出


请在您的问题中添加示例输入无描述、无图像和您对该示例输入的期望输出无评论。嗨,Cyrus,结果栏中提到了期望输出,这仍然是一幅图像。请看,我尝试了var=echo$string | sed s/\$676\.//之类的选项,但它不适用于case.csv_676sed-E's/_676 124; 676//g'?匹配_676和676_,将它们替换为空字符串,如果需要,可以多次替换一行。注意不要将A_676_B更改为AB,而是将A_B更改为AB。
#!/bin/bash

testdata=(
AA_B_676.csv.gz
676_AA_B.csv.sgnl
AA_B.csv_676
AA_B.csv.sgnl_676
)

for str in "${testdata[@]}"; do
   str="${str/_676/}"
   str="${str/676_/}"
   echo "$str" 
done  
AA_B.csv.gz
AA_B.csv.sgnl
AA_B.csv
AA_B.csv.sgnl