如何用grep或sed在Bash中调整apachectl -v的输出格式
修改Apache版本输出格式
问题背景
现有Bash脚本如下:
#!/bin/bash strversion=`apache2ctl -v | awk '{print $3}' | sed 's/(Debian)//g;s/Server//g;s/built//g;s/2022-06-09T04:26:43//g'` echo ${strversion%} exit 0
当前输出为:
Apache/2.4.54
需要将输出修改为:
Apache version 2.4.54
解决方案
方法1:简化命令链,直接用sed完成匹配替换
跳过awk,直接用sed匹配目标行并一次性完成格式转换,更高效简洁:
#!/bin/bash strversion=$(apache2ctl -v | sed -n 's/^Server version: Apache\/\(.*\) (Debian)/Apache version \1/p') echo "$strversion" exit 0
解释:
-n参数让sed只输出匹配成功的行- 正则表达式匹配以
Server version:开头的行,捕获Apache/到(Debian)之间的版本号,替换为Apache version加捕获的版本号后打印结果
方法2:在现有命令基础上调整输出
如果想保留原有命令链,只需在输出阶段用sed替换/为version即可:
#!/bin/bash strversion=`apache2ctl -v | awk '{print $3}' | sed 's/(Debian)//g;s/Server//g;s/built//g;s/2022-06-09T04:26:43//g'` echo "$strversion" | sed 's/Apache\//Apache version /' exit 0
也可以直接在原有sed命令末尾追加替换规则,一步到位:
strversion=`apache2ctl -v | awk '{print $3}' | sed 's/(Debian)//g;s/Server//g;s/built//g;s/2022-06-09T04:26:43//g;s/Apache\//Apache version /'`
内容的提问来源于stack exchange,提问作者The-Exterminator
相关产品推荐
相关产品推荐

