首页 > 解决方案 > 获取字符串的特定部分并将另一部分设置为 null

问题描述

希望你一切都好

我想获取我的字符串的子字符串,其格式为:18d6m2s 等等..我感兴趣的只是获取天数,如果字符串仅包含分钟/秒,我想获取 null 的值/零 ..

例子:

age=12d23m2s ... the needed output is 12
age=21m... the needed output is 0
age=22s... the needed output is 0

我的解决方案是使用 cut (我不能有一个单独的 bash 脚本,这将是另一个命令的输入..)..

我的解决方案:

 awk -F "d" '{print $1}' $6 

但这仅对带有 d 字符的字符串有效。我想将仅包含 m/s 的字符串设置为零/空。

我怎样才能做到这一点 ?

标签: bash

解决方案


您可以使用正则表达式:

if [[ $age =~ ([0-9]+)d ]]; then
  echo "${BASH_REMATCH[1]}"
fi

封装成一个函数:

get_days() {
  [[ $1 =~ ([0-9]+)d ]] && echo "${BASH_REMATCH[1]}" || echo 0
}

for age in  12d23m2s  21m  22s; do
  days=$(get_days "$age")
  echo "days in $age => $days"
done
days in 12d23m2s => 12
days in 21m => 0
days in 22s => 0

推荐阅读