Grep은 0으로 끝나는 줄을 제외하지만 10, 100 등은 제외합니다.

Grep은 0으로 끝나는 줄을 제외하지만 10, 100 등은 제외합니다.

Linux와 Unix 환경 모두에 이 패턴의 파일이 있습니다.

# file1
text1   98432230
text2    123412
text3        10
line4         0
line5         0
line6     40000
...         ...
line10       20
...         ... 

로 끝나는 줄을 제외하려고 하는데 0, 등 으로 끝나는 줄 은 제외하려고 합니다 10.204000098432230

|grep -v "\0$", | grep -v "[[:space:]]0$", | grep -v " 0", 을 테스트했지만 10, 20, 40000 및 98432230을 포함하여 0으로 끝나는 줄을 제외하기 때문에 그 중 아무 것도 작동하지 않습니다 | sed '/0/d'.| sed "/0$/d"

어떤 제안이 있으십니까?

답변1

사용하는 grep대신 awk:

$ awk '$NF!=0' file
text1   98432230
text2    123412
text3        10
line6     40000
...         ...
line10       20
...         ... 

에서 awk변수 NFs는 필드 수 $NF이고 마지막 필드도 마찬가지입니다. true로 평가되는 표현식은 "이 줄 인쇄"를 의미하므로 $NF!=0"마지막 필드가 0이 아닌 모든 줄 인쇄"를 의미합니다.

이를 더욱 단순화하여 다음을 수행할 수도 있습니다.

awk '$NF' file

답변2

grep의 경우 세 가지 사항, 즉 숫자가 아닌 문자와 줄 끝에 "0"이 오는 정규식이 필요합니다.

grep -v '[^0-9]0$'

또한 두 개의 0으로 끝나는 모든 줄을 일치시키고 삭제하시겠습니까 00?

답변3

완전한 "단어"라고 말할 수 있도록 0을 일치시켜야 합니다.

grep -vw '0$'-v"단어" 0으로 끝나는 줄만 일치하고 제외됩니다 .

답변4

사용행복하다(이전 Perl_6)

raku -ne '.put if .grep( none / \D 0 $/ );'    

Raku의 루틴은 위에서 사용되었습니다 grep. 정규식 원자는 \D숫자가 아닙니다. 이 루틴은 none정규식 일치를 테스트하는 Raku의 조인 포인트를 활용합니다 . put무조건적으로 반환 하면 if일치하는 항목이 없는 빈 줄이 포함된 원본 파일이 반환됩니다.

입력 예:

text1  98432230
text2    123412
text3        10
line4         0
line5         0
line6     40000
line10       20

예제 출력:

text1  98432230
text2    123412
text3        10
line6     40000
line10       20

TMTOWTDI: 이 경우 교체 grep하고 사용하면 match동일한 수익이 발생합니다. 와 match(/…/)같이 더 간단하게 작성할 수도 있으며 m/…/, nonegrep/match 연산자 내부는 !아래와 같이 앞의 것과 교체될 수 있습니다. (통찰력/토론을 제공한 Bruce Gray에게 특별한 감사를 드립니다):

raku -ne '.put if .match( none / \D 0 $/ );' 

#OR

raku -ne '.put if  ! .match( / \D 0 $/ );'  

#OR

raku -ne '.put if  ! m/ \D 0 $/;'  

https://docs.raku.org/routine/none
https://docs.raku.org/routine/grep
https://raku.org

관련 정보