2015-05-04 54 views
1

从我的/ 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----- 

回答

1

您可以使用下面的命令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 
+0

谢谢,这正是我需要的 – sgwrist

+0

不客气!如果您关心可移植性,请从最后两个命令中选择一个 – hek2mgl

0

使用正则表达式如下:

grep -o 'ds:([^ ]*)' 
1

您可以使用以下命令查询DRBD设备的状态:

# drbdadm role <resource> 
# drbdadm cstate <resource> 
# drbdadm dstate <resource>