Linux와 Unix 환경 모두에 이 패턴의 파일이 있습니다.
# file1
text1 98432230
text2 123412
text3 10
line4 0
line5 0
line6 40000
... ...
line10 20
... ...
로 끝나는 줄을 제외하려고 하는데 0
, 등 으로 끝나는 줄 은 제외하려고 합니다 10
.20
40000
98432230
|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
변수 NF
s는 필드 수 $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/…/
, none
grep/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