切り取り/grepとdf -h

切り取り/grepとdf -h

「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

関連情報