Анализируя строку версии Hadoop с помощью Bash

Если вы хотите навсегда уничтожить том bcache, вам необходимо стереть суперблок bcache с нижележащего устройства. Эта операция не предоставляется через интерфейс sysfs. Итак:

  1. Остановите устройство bcache, как обычно, с помощью echo 1> / sys / block / / bcache / stop . На более новых ядрах это может привести к ошибке «Permission denied». В таком случае вам нужно будет остановить устройство по его UUID, как объяснено здесь :

     ls -la / sys / block /  / bcache / set 
     # lrwxrwxrwx 1 root root 0 19 июня, 18:42 / sys / block /  / bcache / set -> ../../../../../../../../fs/bcache /  
     # Примечание. UUID - это что-то вроде "89f4c92a-7fae-4d04-ab3c-7c1dd41fa1a5" 
     
    echo 1> / sys / fs / bcache /  / stop 
     
  2. Удалите суперблок с помощью head -c 1M / dev / zero> / dev / . (Если у вас достаточно новая версия util-linux , вы можете использовать вместо нее wipefs , что более точно подходит для очистки подписи bcache: wipefs -a / dev / .) Очевидно, вам нужно быть осторожным, чтобы выбрать правильное устройство, потому что это деструктивная операция, которая сотрет заголовок устройства. Обратите внимание, что у вас больше не будет доступа к каким-либо данным в томе bcache!

1
21.01.2018, 21:19
3 ответа

Вы можете легко сделать это в bash:

input='2.6.4.0-91'
input=${input%-*}
input=${input//./}
echo "$input"
2640
3
27.01.2020, 23:10

Это решение подходит для тех, кто знает регулярные выражения и не знает sedили awk.

exprи trвзяты из "GNU Core Utilities". К сожалению, exprиспользует основное регулярное выражение , и каждое регулярное выражение привязано к ^.

expr "$(hdp-select)" : '.*oop-client - \(\([0-9]\+\.\?\)\+\)-[0-9]\+' | tr -d '.'

Результат:

2640
0
27.01.2020, 23:10

Это можно сделать прямо в оболочке (bash):

$ re='hadoop-client - ([0-9]+).([0-9]+).([0-9]+).([0-9]+)-'
$ a=$(hdp-select)
$ (IFS='' ; [[ $a =~ $re ]] && echo "${BASH_REMATCH[*]:1}" )
2640

Если вы ограничены более старыми оболочками, используйте аналогичное регулярное выражение сexpr:

$ expr "$(hdp-select)" : '.*client - \([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)-.*' | sed 's/\.//g'
0
27.01.2020, 23:10

Теги

Похожие вопросы