줄에서 마지막 문자 제거


54

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

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

예상 결과:

Use
22
1
1
59
51
63
5

2
항상 %징조입니까?
Bernhard

답변:


82
sed 's/.$//'

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

그러나이 특정한 경우에도 다음을 수행 할 수 있습니다.

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

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

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

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

(꼬리는 머리글을 건너 뛰고 tr은 숫자와 줄 구분자를 제외한 모든 것을 제거합니다).

Linux에서 다음을 참조하십시오.

findmnt -no USE%

9
{print +$5}잘 작동합니다 ...
jasonwryan

1
@jasonwryan, 불행히도, 작동하지 않는 많은 awk구현 이 있습니다. +단항 연산자는 무시되고 문자열을 숫자로 강제 변환하지 않습니다.
Stéphane Chazelas

20

을 사용하면 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/.$//'

2
파이프 sed중복 : 그것은 할 수 있습니다 awk:df -h | awk '{gsub(/%/,""); print $5}'
jasonwryan

@jasonwryan 그렇다면 Stephane의 솔루션이 더 좋습니다.
Bernhard

15

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

  1. 절단: echo "somestring1" | rev | cut -c 2- | rev

    여기에서 문자열을 뒤집고 두 번째 문자에서 문자열을 자르고 다시 뒤집습니다.

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

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


7

awk에서는 다음 중 하나를 수행 할 수 있습니다.

awk '{sub(/%$/,"",$5); print $5}'
awk '{print substr($5, 1, length($5)-1)}'

2

다른 접근법 :

mapfile -t list < <(df -h)
printf '%s\n' "${list[@]%?}"

함수로 바꾸십시오 :

remove_last() {
  local char=${1:-?}; shift
  mapfile -t list < <("$@")
  printf '%s\n' "${list[@]%$char}"
}

그런 다음 다음과 같이 호출하십시오.

remove_last '%' df -h

mapfile bash4 기능입니다.

여기서 중요한 것은 제거 할 캐릭터를 제공 해야 한다는 것입니다 . 당신은 그냥 수있게하려면 마지막 문자가 될 일이 무엇이든 당신이 통과해야 다음 '?'또는 ''. 따옴표가 필요합니다.



1

이것으로 시도하십시오 :

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

일반적인 사용법은 다음과 같습니다.

VALUE=987654321
echo X123456789X | sed "s/123456789/${VALUE}/"

응답은 다음과 같아야합니다. X987654321X


1
df -h | awk 'NR > 1{ print $5 }' | cut -d "%" -f1

이 답변은 작동 방식 및 대안보다 더 나은 이유에 대해 약간의 설명을 제공 할 수 있으면 OP 이외의 다른 사람에게 더 도움이 될 수 있습니다.
Fox

유닉스 스택 교환에 오신 것을 환영합니다! 둘러보기 를 통해이 사이트가 어떻게 작동하는지 느낄 수 있습니다 . 답변을 할 때 독자가 원하는 답변 인 이유에 대해 설명 하는 것이 좋습니다 . 이는 작동 방식에 대한 설명을 제공하는 것이 가장 좋습니다. 위에서 보시면, 가장 높은 투표 응답이 코드를 설명하는 것을 볼 수 있습니다.
Stephen Rauch

사용에 대한 Upvoted으로 cut -d '%' -f1하는 최초의 '%'까지 라인에서 모든 것을 얻을 수있는 정답이다.
Titou

또한 나는 해로운 / 오답 만 0 이하로
하향 조정

0
sed -ie '$d' filename

here -i is to write changes
      e means expression
      $ means last line
      d means delete

Note:Without -e option $ wont work

선택 사항 : 첫 번째 줄과 마지막 줄을 삭제하려면 sed -ie '1d;$d'filename을 사용하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.