Ответ Bash scripting egrep

#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 , и это сработало отлично! Спасибо