我有一些字符串......其中一些字符串中的字符更少......这里有一些例子。
ABC_DEF_GHI_JKL_${COD}_${DATE}
ABC_DEF_${COD}_${DATE}
ABC_${COD}_${DATE}
我必须做一个功能,我必须切出$ {COD}和一个_。所以新的字符串变成了
ABC_DEF_GHI_JKL_${DATE}
ABC_DEF_${DATE}
ABC_${DATE}
其中$ {COD}是一个数字...介于1和300之间。但是在字符串中有时在$ {COD}之前的中间有数字。
唯一可靠的部分是它们的结尾是_${COD}_${DATE}
有没有人知道怎么做?
答案 0 :(得分:1)
在POSIX shell中,您可以使用
date=${str##*_}
tmp=${str%_$date}
cod=${tmp##*_}
str=${tmp%_$cod}_${date}
在bash
(或支持类似数组语法的其他shell)中,您可以使用
IFS=_ read -a parts <<< "$str"
cod=${parts[${#parts[@]}-2]}
# Or in bash 4.3, cod=${parts[-2]}
str=${str/_$cod_/_/}
答案 1 :(得分:0)
这是一个sed版本:
sed -n 's/\(.*\)_\(.*\)_\(.*\)$/\1_\3/p' filename
贪婪地匹配后缀并在替换
中删除不需要的部分(\ 2)答案 2 :(得分:0)
这是一个核心Unix工具版本:
in=AAA_BBB_123_654_20151207 # input string
n=`echo $in | grep -o _ | wc -l` # index of field to remove (here: 4)
nm1=`expr $n - 1` # index before field to remove (here: 3)
np1=`expr $n + 1` # index after field to remove (here: 5)
out=`echo $in | cut -d_ -f-$nm1,$np1-` # remove n-th field from string
结果:
echo $out
AAA_BBB_123_20151207