如果有14位数,则从字符串和下划线中删除最后14位数字

时间:2013-06-20 18:12:28

标签: regex bash

我有一个这样的字符串:

data-c(huk24-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(huk24)_20130620200658

应删除带有14位数字和下划线的时间戳。所以看起来应该是这样的:

data-c(huk24-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(huk24)

如何在bash脚本中实现此目的?请注意,只有在确实存在下划线和14位数时才应该删除。

5 个答案:

答案 0 :(得分:4)

使用参数扩展:

string=${string%_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}

答案 1 :(得分:2)

使用sed:

echo $str | sed 's/_[0-9]\{14\}$//'

OR

echo ${str%_[0-9]*}

答案 2 :(得分:2)

使用awk

awk --re-interval -F_ '{$NF~/^[0-9]{14}$/?NF--:NF}1' <<< $var

答案 3 :(得分:2)

例如:

perl -plE 's/_\d{14}$//' < input > output

e.g

echo 'data-c(huk24-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(huk24)_20130620200658' | perl -plE 's/_\d{14}$//'

产生

data-c(huk24-small1);divider-bin-1.4.4;divider-conf-1.3.3-w(1,16);storage-bin-1.5.4;storage-conf-1.5.0-w(1);worker-bin-4.5.1;worker-conf-4.4.1-c(huk24)

答案 4 :(得分:2)

使用bash正则表达式:

[[ $string =~ ^(.*)_[[:digit:]]{14}$ ]] && string=${BASH_REMATCH[1]}