vieyahn2017 / shellv

shell command test and study
4 stars 1 forks source link

5.26 shell正则提取字符串中的数字并保存到变量 #45

Closed vieyahn2017 closed 5 years ago

vieyahn2017 commented 5 years ago

shell正则提取字符串中的数字并保存到变量 https://blog.csdn.net/c_shell_python/article/details/81115562

vieyahn2017 commented 5 years ago

提取数字到变量

方法1 tr

temp=`echo  "helloworld20180719" | tr -cd "[0-9]" `

echo $temp
vieyahn2017 commented 5 years ago

解释一下 | 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

vieyahn2017 commented 5 years ago

方法2 grep

echo  "helloworld20180719"  | grep -P "\d+" -o
20180719

-P参数表明要应用正则表达式 -o表示只输出匹配的字符串,这样我们就可以把正则匹配到的结果拿到了。

vieyahn2017 commented 5 years ago

方法3 sed

echo  "helloworld20180719"  | sed 's/.*d\([0-9]*\).*/\1/g'
20180719

echo here365test | sed 's/.*ere\([0-9]*\).*/\1/g'
365

s表示替换,\1表示用第一个括号里面的内容替换整个字符串,sed支持*,不支持?、+,不能用\d之类,正则支持有限。

vieyahn2017 commented 5 years ago

替换字符串

echo here365test | sed "s/365/789/g"

# 注意,必须是双引号,不然引用变量会有问题!没错,就是这么严苛奇葩!
newid=996
echo here365test | sed "s/365/$newid/g"

#输出:

here789test
here996test
vieyahn2017 commented 5 years ago

方法2 3来自

Shell中使用grep、sed正则提取、替换字符串

https://blog.csdn.net/tp7309/article/details/51418412

pikakolendo02 commented 2 years ago

tr方法很好