我想在 shell 脚本中 grep 某些 shell 命令输出的某些部分:
$ uname -r
>> 3.14.37-1-lts
我只需要的地方3.14.37
。
对于VERSION
值为“-jwl35”的 shell 脚本变量,我只想采用值“jwl35”。
如何在 shell 脚本中使用正则表达式?
提前致谢!
答案1
很多很多方式。以下是一些:
GNU Grep
$ echo 3.14.37-1-lts | grep -oP '^[^-]*' 3.14.37
sed
$ echo 3.14.37-1-lts | sed 's/^\([^-]*\).*/\1/' 3.14.37
Perl
$ echo 3.14.37-1-lts | perl -lne '/^(.*?)-/ && print $1 3.14.37
或者
$ echo 3.14.37-1-lts | perl -lpe 's/^(.*?)-.*/$1/' 3.14.37
或者
$ echo 3.14.37-1-lts | perl -F- -lane 'print $F[0]' 3.14.37
awk
$ echo 3.14.37-1-lts | awk -F- '{print $1}' 3.14.37
cut
$ echo 3.14.37-1-lts | cut -d- -f1 3.14.37
甚至是贝壳!
$ echo 3.14.37-1-lts | while IFS=- read a b; do echo "$a"; done 3.14.37