5

次のような文字列があります。

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 桁が実際に存在する場合にのみ、削除が行われることに注意してください。

4

5 に答える 5

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]}
于 2013-06-20T18:15:21.153 に答える
2

awk:

awk --re-interval -F_ '{$NF~/^[0-9]{14}$/?NF--:NF}1' <<< $var
于 2013-06-20T18:16:32.623 に答える
2

例えば:

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

例えば

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)
于 2013-06-20T18:16:47.203 に答える
2

sed を使用します。

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

また

echo ${str%_[0-9]*}
于 2013-06-20T18:15:23.730 に答える