Closed vieyahn2017 closed 5 years ago
提取数字到变量
temp=`echo "helloworld20180719" | tr -cd "[0-9]" `
echo $temp
解释一下 | tr -cd "[0-9]"
|其实就是管道描述符,将上个指令的标准输出。作为下个指令的标准输入
如echo "helloworld20180719" | tr -cd "[0-9]"
意思就是将"helloworld20180719"这句话作为 tr -cd "[0-9]"的输入
tr其实是translate的缩写,主要用于删除文件中的控制字符,或进行字符转换
-d表示删除,[0-9]表示所有数字,-c表示对条件取反
所以tr cd "[0-9]"这句话的意思就是,剔除非数字的字符。
即输出20180719
echo "helloworld20180719" | grep -P "\d+" -o
20180719
-P参数表明要应用正则表达式 -o表示只输出匹配的字符串,这样我们就可以把正则匹配到的结果拿到了。
echo "helloworld20180719" | sed 's/.*d\([0-9]*\).*/\1/g'
20180719
echo here365test | sed 's/.*ere\([0-9]*\).*/\1/g'
365
s表示替换,\1表示用第一个括号里面的内容替换整个字符串,sed支持*,不支持?、+,不能用\d之类,正则支持有限。
替换字符串
echo here365test | sed "s/365/789/g"
# 注意,必须是双引号,不然引用变量会有问题!没错,就是这么严苛奇葩!
newid=996
echo here365test | sed "s/365/$newid/g"
#输出:
here789test
here996test
tr方法很好
shell正则提取字符串中的数字并保存到变量 https://blog.csdn.net/c_shell_python/article/details/81115562