cut / grep 和 df -h

cut / grep 和 df -h

如何 grep 或剪切“Verf”下的“173G”?

我需要這個來在學校編寫 Unix 腳本。

jonas@jonaspc:~/$ df -h /dev/sda2
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda2       293G    121G  173G   42% /media/Windows

答案1

對於此類任務最舒適的解決方案是awk

df -h /dev/sda2 | awk 'NR==2{print$4}'

或者,如果列出了更多分割區,您可以透過安裝點選擇正確的行:

df -h | awk '$1=="/dev/sda2"{print$4}'

使用也很簡單sed,但是如果您需要稍後安裝幾次來調試它,則不太好:

df -h /dev/sda2 | sed -rn '2s/^((\S+)\s+){4}.*/\2/p'

df -h | sed -rn '/^\/dev\/sda2/s/^((\S+)\s+){4}.*/\2/p'

假設 GNU sed。 POSIX 相容語法包括許多轉義:

df -h /dev/sda2 | sed -n '2s/^\(\(\S\+\)\s\+\)\{4\}.*/\2/p'

df -h | sed -n '/^\/dev\/sda2/s/^\(\(\S\+\)\s\+\)\{4\}.*/\2/p'

答案2

如果必須使用 grep 和 cut,可以執行下列操作:

df -h /dev/sda2 | grep sda | cut -d" " -f14

但這非常難看,因為您必須計算空格(-f14)以及@manatwork使用awk的原因。您可以使用tr或其他工具來使其更好,並且能夠指定您想要剪切的實際欄位:

df -h /dev/sda2 | grep sda | tr -s " " " " | cut -d" " -f4

或者,較新的 grep 支援僅輸出部分匹配,您可以將其與 bash 技巧結合使用:

df -h /dev/sda2 | grep -o '[^[:space:]]*G' | cut -d$'\n' -f3

正規表示式可能更安全,但這會找到所有大小欄位並每行輸出一個,而 cut 選擇第二個。

答案3

這裡的所有其他答案都很好,但是如果您使用重擊,不需要使用awk、sed、grep、cut等外部程式。

以下行將執行您想要的操作:

{ read; read -r _ _ _ av _; } < <(df -h /dev/sda1)

“$av”將是 /dev/sda1 上的可用大小

如果您只想使用數位部分“$av”(例如123在 123G 中),您可以使用參數擴充像這樣修剪不相關的部分:

ir="${av##*[0-9]}"; echo "${av%$ir}"

或只是"${av%?}"如果您確定後綴“$av”只有一個字母。

答案4

如果不一定是grep/ cut,您也許可以使用 來獲得相同的資訊stat。在檔案系統模式下,%a是可用區塊數和%s區塊大小,也是%a * %s以位元組為單位的可用空間,您可以根據自己的喜好用它進行數學運算,將其分解為您選擇的更合適的單位,例如:

echo $((`stat -f -c "%a*%s" /media/windows/`/1024/1024/1024))GiB

相關內容