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