Как получить значения всех ключей в Memcached
В комментариях к одной из статей на «Хабре» привели однострочник для командной строки, чтобы вывести содержимое всех ключего локального memcached, я его прямо там причесал, но подумал, что он может мне и самому в будущем пригодиться. Переношу сюда:
nc localhost 11211 <<<"stats items" | awk -F: '/STAT items:[0-9]+/{if (!a[$2]++) print $2}' |
xargs -I{} echo 'stats cachedump {} 100' | nc localhost 11211 | awk '/ITEM/{print $2}' | xargs -n1 echo get |
nc localhost 11211
Без использования awk:
nc localhost 11211 <<<"stats items" | sed -n '/STAT/{s/[^:]*:\([^:]*\).*/stats cachedump \1 100/;p}' | sort -u |
nc localhost 11211 | sed -n '/ITEM/{s/[^ ]* \([^ ]*\) .*/get \1/;p}' | nc localhost 11211
Без использования awk и sed:
nc localhost 11211 <<<"stats items" | grep -Po '(?<=STAT items:)\d+' | sort -u |
xargs -I. echo stats cachedump . 100 | nc localhost 11211 | grep -oP '(?<=ITEM )\S*' |
xargs -n1 echo get | nc localhost 11211
Без использования awk, это чисто спортивный интерес человека, написавшего шахматы на sed?
Или есть объективные причины усложнять?
Комментарий для akademic.name:
Ну, там попросили без awk, а sed у человека использовался. Кроме того, там ничего сложного нет вообще, две команды простые, одна из них — вывод в поток.
А как это в переменную засунуть?
Комментарий для Chibiko:
VAR=$(…)
100 в коде (stats cachedump {} 100) — это ограничение по выдаваемой этой командой порцией ключей, чтобы отключить ограничение, надо поставить 0, но и в этом случае оно будет ограничено по размеру — ≈1—2 мегабайта.