如何在bash中从命令输出结果里提取指定参数并赋值给变量
提取指定内容并赋值给Bash变量的方法
你可以通过以下任意一种常用的文本处理命令实现需求:
方法1:使用grep(Perl正则模式)
直接通过正则前瞻后顾匹配括号内的内容:
shutdown_duration=$(last -1x shutdown | grep -oP '(?<=\().*(?=\))')
参数说明:
-o:仅输出匹配到的内容,而非整行-P:启用Perl正则语法(?<=\():匹配左括号(右侧的位置,不会将左括号计入匹配结果(?=\)):匹配右括号)左侧的位置,不会将右括号计入匹配结果
方法2:使用awk(更简洁,适配字段固定的场景)
你的示例输出中括号内容是最后一个字段,直接处理最后一个字段去掉括号即可:
shutdown_duration=$(last -1x shutdown | awk '{gsub(/[()]/,"",$NF);print $NF}')
参数说明:
$NF:指代当前行的最后一个字段gsub(/[()]/,"",$NF):将最后一个字段中的所有左右括号替换为空- 如果你执行命令时可能输出空行,可以加过滤逻辑:
shutdown_duration=$(last -1x shutdown | grep -v '^$' | awk '{gsub(/[()]/,"",$NF);print $NF}')
方法3:使用sed
通过正则捕获组提取括号内内容:
shutdown_duration=$(last -1x shutdown | sed -E 's/.*\((.*)\).*/\1/')
参数说明:
-E:启用扩展正则语法\((.*)\):捕获两个括号中间的所有内容,\1指代第一个捕获组的内容
赋值完成后执行echo $shutdown_duration即可验证输出结果为11:00。
内容的提问来源于stack exchange,提问作者Xiaomi Account
相关产品推荐
相关产品推荐

