如何使用sed或正则表达式截断shell脚本中的字符串?

时间:2017-03-01 11:29:10

标签: regex string shell sed

我有一个类似" siva:x:503:505::/home/abc:/bin/bash "的字符串。  我想只在变量中存储503。如何使用正则表达式或sed命令实现这一点。还是可以用其他方式?

3 个答案:

答案 0 :(得分:1)

  

我只想在变量

中存储 503

使用以下方法之一:

    具有特定正则表达式模式的
  • sed命令:

    number=$(echo " siva:x:503:505::/home/abc:/bin/bash " | sed -rn 's/[^0-9]*([0-9]+).*/\1/gp')
    

    ([0-9]+) - 将捕获第一个数字序列

  • awk命令,带有正则表达式模式[^0-9]*指定的字段分隔符:

    number=$(echo " siva:x:503:505::/home/abc:/bin/bash " | awk -F"[^0-9]*" '{print $2}')
    

    -F"[^0-9]*" - 非数字序列被视为字段分隔符(通过字段编号访问所有数字)

echo $number

输出:

503

答案 1 :(得分:0)

使用awk -F":" '{print $3}'

bash-4.2$  echo " siva:x:503:505::/home/abc:/bin/bash "|awk -F":" '{print $3}'
503

答案 2 :(得分:0)

使用cut

myvar=$(echo "siva:x:50ds3:505::/home/abc:/bin/bash" | cut -d':' -f3);