我有一个这样的字符串:
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位数时才应该删除。
答案 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]}