apachectl-怀疑正则表达式

时间:2019-12-05 11:49:27

标签: linux apache awk sed systemctl

如何仅获取wp.pages().slug( 'about' )状态命令的状态?

例如,在下面的输出中,我只想使用“ running”一词

apachectl

我设法通过以下命令获得了正常运行时间:

Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago

但是,我不能适应此命令来获取状态。

3 个答案:

答案 0 :(得分:1)

您实际上应该以这种方式执行此操作。 is-active是获取systemctl服务状态的准确命令。

[[ $(sudo systemctl is-active test.service) == "active" ]] && echo "Running." || echo "NOT runnnig."

或更清楚地是:

[[ $(sudo systemctl is-active test.service) == "active" ]]\
&& echo "Running." || echo "NOT runnnig."

按照Ed先生的评论,或者更安全的选择将使用常规的ifelse选项,如下所示。

if [[ $(sudo systemctl is-active test.service) == "active" ]]
then
    echo "Running."
else
    echo "NOT runnnig."
fi

在systemctl的手册页中:

  

是活动模式...检查是否有任何指定的单位   有效(即正在运行)。如果至少一个是退出代码,则返回退出代码0   有效,否则为非零。除非指定了--quiet,否则将   还将当前单位状态打印到标准输出。

答案 1 :(得分:1)

使用echo '...'代替我没有的apachectl status

$ echo 'Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago' |
    awk -F'[()]' '{print $2}'
running

您问题中的sed命令管道存在语法错误,当我尝试修复它们时,我只会得到输出min ago

$ echo 'Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago' |
    sed -n '/ago$/p' | sed 's/.\{62\}//'
min ago

如果这是您想要的输出,请使用idk,但请考虑:

$ echo 'Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago' |
    awk -F'; ' '{print $NF}'
22min ago

我也有鸡

答案 2 :(得分:1)

如果apachectl status产生Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago,则您的问题-获取第一个括号之间的字符串-可以解决

apachectl status | sed -n 's/[^(]*(\([^()]*\)).*/\1/p'`

Proof

echo "Active: active (running) since Thu 2019-12-05 08:23:56 -03; 22min ago" | sed -n 's/[^(]*(\([^()]*\)).*/\1/p'
# => running

模式匹配:

[^(]*      - from start till first (
(          - ( char
\([^()]*\) - a capturing group matching substring inside parentheses
)          - ) char
.*         - up to the string end

-n ... p打印结果。