将部分grep设置为变量


mysqladmin proc status | grep "Threads"

输出:

Uptime: 2304  Threads: 14  Questions: 2652099  Slow queries: 0  Opens: 48791  Flush tables: 3  Open tables: 4000  Queries per second avg: 1151.08

我想设置它,使$mysqlthread在运行echo $mysqlthread后输出14

可能最简单的方法是使用Perl而不是grep。

mysqladmin proc status | perl -nle'/Threads: (d+)/ && print $1'

perl -n表示"遍历每一行输入"。

perl -l表示在每个print"的末尾打印一个n

perl -e表示"这是我的程序";

/Threads: (d+)/表示"matchThreads:后跟一个或多个数字。print $1表示"打印我找到的数字,如d+周围的括号所示。

使用grep

$ mysqlthread=$(mysqladmin proc status | grep -Po 'Threads: Kd+')
$ echo "$mysqlthread"
14

有很多方法可以解决这个问题。这是

mysqladmin proc status | grep "Threads" | tr -s ' ' | cut -d' ' -f4

-s标志的tr命令用于将所有连续的多个空格转换为单个空格。然后,cut命令返回第4个字段,使用单个空格作为分隔符。

管道命令的优点是可以交互式地完成这个过程。当你不确定使用哪个标志时,手册页可以提供帮助:man grep,man tr,man cut等。

添加awk来分割输出,

mysqlthread=$(mysqladmin proc status | grep "Threads" | awk '{print $4}')

最新更新