LINUX.ORG.RU
решено ФорумAdmin

Shell. Подсказка


0

1

Хочу получить состояние DRBD диска в одну строку (Connected и т.п)
Весь вывод

# cat /proc/drbd
version: 8.3.9 (api:88/proto:86-95)
srcversion: CF228D42875CF3A43F2945A
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:9326184 nr:0 dw:9326416 dr:25861612 al:2236 bm:56 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:203124 dw:203124 dr:0 al:0 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 2: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:3864092 dw:3864092 dr:0 al:0 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 3: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 4: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:4179832 dw:4179832 dr:0 al:0 bm:25 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
Выбираем какой диск нас интересует
# cat /proc/drbd |grep 0:
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
Теперь надо получить состояние (текст после «cs:» до первого пробела)
# cat /proc/drbd |grep 0: |?????????
Connected

★★★★★

for arg in `cat /proc/drbd | grep '^ 0:'`; do
    case "$arg" in
        cs:*)
             STATE="${arg#cs:}"
             ;;
    esac
done
echo "$STATE"
gentoo_root ★★★★★
()
Ответ на: комментарий от backbone
# cat /proc/drbd |grep 0:| cut -d" " -f3
cs:Connected
petav ★★★★★
() автор топика
Ответ на: комментарий от backbone
# grep 0: /proc/drbd | sed 's~.*cs:\([A-z]*\).*~\1~'
sed: -e выражение #1, символ 23: Неверный конец диапазона
petav ★★★★★
() автор топика
Ответ на: комментарий от zolden

Волшебство )

# awk -F':' '/0:/{split ($3,A," ");print A[1]}' /proc/drbd
Connected
petav ★★★★★
() автор топика
Ответ на: комментарий от AITap
# sed -r '/0:/{s/.*cs:([^ ]+) .*/\1/p};d' /proc/drbd
Connected
petav ★★★★★
() автор топика
Ответ на: ro попадает от petav

Просто лень проверять

Надо

awk -F'[: ]+' ....

sdio ★★★★★
()
Ответ на: комментарий от petav

># grep 0: /proc/drbd | sed 's~.*cs:\([A-z]*\).*~\1~'
> sed: -e выражение #1, символ 23: Неверный конец диапазона

Странно, у меня работает! :(

backbone ★★★★★
()

Проверь, пожалуйста, хочу разобраться. Такой вариант работает?

grep 0: /proc/drbd | sed 's~.*cs:\([A-Za-z]*\).*~\1~'

backbone ★★★★★
()
Ответ на: комментарий от backbone

нет, давай полностью на grep. я пока дошёл до этого уровня:

# echo '0: cs: Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----' | grep -Po '(?<=0: cs:).*?(?=:)
Connected ro

zolden ★★★★★
()
Ответ на: aha, блдаж!!! от zolden
# grep -Po '(?<=0: cs: ).*?(?=:ro)' /proc/drbd

petav ★★★★★
() автор топика
Ответ на: Работает от petav

Ага, понял теперь, ошибка была в том, что [A-z] - не верный диапазон был...

backbone ★★★★★
()
Ответ на: aha, блдаж!!! от zolden

так работает! :)

grep -Po '(?<=0: cs: ).*?(?= ro:)' /proc/drbd

backbone ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.