#regex #linux #bash #grep
#регулярное выражение #linux #bash #grep
Вопрос:
Я пытаюсь выделить только третий вариант из запроса для скрипта
size=$(df -h / | egrep -o '[0-9] (.[0-9]*)?[A-Za-z]?')
Который возвращает
30G
2.8G
26G
10
Есть ли простой способ изолировать 3-й (если не все ответы) для отдельных переменных? Моя следующая отчаянная попытка — передать данные во временный текстовый файл, а затем перевести их в нужную строку
Комментарии:
1. Можете ли вы более конкретно указать, из какой информации вы пытаетесь извлечь
df
и что вы пытаетесь с ней сделать? Вы пытаетесь получить третий столбец безdf
заголовка?df -h | awk 'NR > 1 { print $3 }'
будет работать для этого.2. В частности, я пытался извлечь доступную память из / dev / root на rasp pi
df -h / | awk 'NR==2{print $4}'
возвращает требуемое значение, хотя, спасибо!3. Пожалуйста, размещайте ответы в блоках ответов. Позже вы можете принять свой собственный ответ. Также смотрите, как работает принятие ответа?
Ответ №1:
Вы можете использовать --output
, чтобы точно контролировать, какие столбцы печатаются. Таким образом, вам не нужно выполнять какой-либо дополнительный синтаксический анализ. При этом будет напечатан только используемый столбец и пропущена строка заголовка:
df --output=used -h / | tail 2
Если вы хотите получить определенную строку выходных данных, вы можете использовать sed
. Это приведет к печати третьей строки вывода (заголовок является первым):
df --output=used -h / | sed -n '3p'
Однако, вместо того, чтобы искать конкретный номер строки, было бы разумнее просто попросить df
указать статус интересующего вас раздела. Если бы это было /home
, например:
df --output=used -h /home
Комментарии:
1. На самом деле я искал доступную память, но я изменил ее до
bash df -h / --output=avail
, и это сработало отлично! Спасибо