"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
정규 표현식이 더 안전할 수도 있지만 이는 모든 크기 필드를 찾아 한 줄에 하나씩 출력하는 반면, cut은 두 번째 필드를 선택합니다.
답변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