줄에서 마지막 문자 제거

줄에서 마지막 문자 제거

줄의 마지막 문자를 제거하고 싶습니다.

[root@ozzesh ~]#df -h | awk  '{ print $5 }'
Use%
22%
1%
1%
59%
51%
63%
5%

예상되는 결과:

Use
22
1
1
59
51
63
5

답변1

sed 's/.$//'

마지막 문자를 제거합니다.

하지만 이 특정한 경우에는 다음과 같이 할 수도 있습니다.

df -P | awk 'NR > 1 {print $5+0}'

산술 표현식( $5+0)을 사용하여 awk5번째 필드를 숫자로 해석하고 숫자 뒤의 모든 항목은 무시됩니다.

GNU df( -h여기에서는 필요하지 않지만 이미 GNU 확장임)는 디스크 사용량 비율만 출력하도록 지시할 수도 있습니다.

df --output=pcent | tail -n +2 | tr -cd '0-9\n'

(tail은 헤더를 건너뛰고, tr은 숫자와 줄 구분 기호를 제외한 모든 것을 제거합니다.)

Linux에서는 다음도 참조하세요.

findmnt -no USE%

답변2

여기 있습니다 sed. 매우 간단합니다.

$ cat file
Use%
22%
1%
1%
59%
51%
63%
5%
$ sed 's/.$//' file
Use
22
1
1
59
51
63
5

구문은 입니다 s(ubstitute)/search/replacestring/. .모든 문자를 나타내고 $줄의 끝을 나타냅니다. 따라서 .$마지막 문자만 삭제됩니다.

이 경우 전체 명령은 다음과 같습니다.

df -h | awk '{ print $5}' | sed 's/.$//'

답변3

두 가지 해결책이 있습니다.

  1. 자르다: echo "somestring1" | rev | cut -c 2- | rev

    여기에서는 문자열을 반전시키고 두 번째 문자에서 문자열을 잘라낸 다음 다시 반전시킵니다.

  2. sed: echo "somestring1" | sed 's/.$//'

    .$여기에서는 마지막 문자 뒤의 모든 문자를 의미하는 정규식을 검색 하고 이를 null //(두 개의 슬래시 사이) 로 바꿉니다.

답변4

이 사실을 알고 계십니까 head? tail라인 단위가 아닌 문자 단위로 작업할 수 있습니까?

$ printf "I don't like periods." | head -c-1
I don't like periods

(BTW, printf여기서는 "개행" 문자가 줄 끝에 인쇄되는 것을 방지하기 위해 사용됩니다. 출력에 개행 문자가 있고 공백이 아닌 마지막 문자와 함께 이를 제거하려는 경우 사용하십시오 head -c-2.)

이것은 기본적으로 "Guru"가 사용하는 것과 동일한 솔루션이지만 "last n things" 구문이 없기 때문에 cut앞뒤로 사용해야 하는 펑키한 작업이 없습니다.revcut

일련의 줄을 반복하고 각 줄의 마지막 문자를 제거하려면 다음과 같이 할 수 있습니다.

some-command | while read line; do echo $(head -c-2 <<<"$line"); done

관련 정보