「Verf」の下で「173G」をどのようにgrepしたり切り取ったりするのですか?
学校で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
正規表現はより安全かもしれませんが、これはすべてのサイズフィールドを見つけて1行に1つずつ出力しますが、cutは2番目のフィールドを選択します。
答え3
ここの他のすべての答えは素晴らしいですが、吹く、awk、sed、grep、cutなどの外部プログラムを使用する必要はありません。
次の行は目的の操作を行います。
{ read; read -r _ _ _ av _; } < <(df -h /dev/sda1)
"$av"/dev/sda1で利用可能なサイズになります。
数字部分だけを使いたい場合"$av"(例えば123123Gで)、あなたは利用可能ですパラメータ拡張次のように関係のない部分をトリミングします。
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