如何使用grep/regex/cut/awk/sed等提取drbd状态
问题描述:
从我的/ proc/drbd的输出中我试图提取每个设备(0和1)这个输出的'UpToDate/UpToDate'部分。我想:如何使用grep/regex/cut/awk/sed等提取drbd状态
cat /proc/drbd | grep ' 0:' | grep -Eo 'ds:(.*)'
但是,这给了我:
ds:UpToDate/UpToDate C r-----
那不是我要找的(寻找让UpToDate的地方/传播UpToDate的插槽)或UpToDate的基本的“一回/UpToDate'..Anyways,这里的/ proc/DRBD的输出:
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
答
您可以使用下面的命令grep
:
grep -o 'ds[^[:space:]]\+' /proc/drbd
如果你不想在前面的ds:
,则可以在perl
模式下使用grep(如果你有GNU grep
):
grep -oP 'ds:\K[^\s]+' /proc/drbd
的\K
清除其以前被匹配的一切 - 在这种情况下, ds:
。
如果你没有GNU grep
,您可以使用awk
:
awk -F'[: ]' '{print $8}' /proc/drbd
或sed
:
sed 's/.*ds:\([^[:space:]]\+\).*/\1/' /proc/drbd
答
使用正则表达式如下:
grep -o 'ds:([^ ]*)'
答
您可以使用以下命令查询DRBD设备的状态:
# drbdadm role <resource>
# drbdadm cstate <resource>
# drbdadm dstate <resource>
谢谢,这正是我需要的 – sgwrist
不客气!如果您关心可移植性,请从最后两个命令中选择一个 – hek2mgl