잘라내기 / 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

정규 표현식이 더 안전할 수 있지만 이렇게 하면 모든 크기 필드를 찾아 한 줄에 하나씩 출력하고 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

관련 정보