2015-05-04 56 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>