sed 正则表达式截取字符串
今天接到一个任务,是关于针对不同的版本的设备,用ansible下发不同的指令的。写吧。
首先,这个任务的第一步,也是很关键的一步,就是去获取版本号,查出来的版本号如下:
Version: VyOS 1.1.8
Version: VyOS 1.2.1
Version: v1.10.7
很明显,一般的字符串截取,已经不顶用了。那么,在这里,应该采用正则表达式,去截取字符串。我们知道在正则里面:
1 | \d 表示 一个数字 |
那么我们要去截取版本号,应该是(\d.\d+.\d)。但是偏偏sed不是这么玩的,有点恶心。
规则如下:
sed正则中的空格就用空格表示,而不是\s,补充:可以用\s
sed正则中的数字只能用[0-9],而不能用\d表示
sed正则中的1或者多个,只能用+,而不能用+,区别就是加了转义字符
sed正则中的()前要加转义字符,变成\(\)
number=xxx这条赋值语句的等号两边不能有空格,如果赋值语句有空格,linux系统会认为number是一个命令
所以,我们的表示得这么去写:
1 | 查看版本的命令 | grep Version' | sed 's/\(.*\)\([0-9].[0-9]\+.[0-9]\)/\2/g' |