awk가 문자 클래스를 어떻게 인식합니까?awk가 문자 클래스를 사용하도록하십시오.
예이 :
echo "a\n1\nb\n2\nc" | awk '/1/'
출력 예상 1
있지만 : I 필터 살아남 모두 1
및 2
예상
echo "a\n1\nb\n2\nc" | awk '/\d/'
출력 아무것도.
이것은 쉘 이스케이프 (zsh)와 관련이 있다고 생각하지만 awk '/\\d/'
도 작동하지 않습니다.
awk가 문자 클래스를 어떻게 인식합니까?awk가 문자 클래스를 사용하도록하십시오.
예이 :
echo "a\n1\nb\n2\nc" | awk '/1/'
출력 예상 1
있지만 : I 필터 살아남 모두 1
및 2
예상
echo "a\n1\nb\n2\nc" | awk '/\d/'
출력 아무것도.
이것은 쉘 이스케이프 (zsh)와 관련이 있다고 생각하지만 awk '/\\d/'
도 작동하지 않습니다.
당신 수 철자 아웃 문자 클래스 사용해보십시오 : \d
같은 표기가 실제로 대부분의 AWK 변종에 의해 이해 정규식 방언 ERE의 일부가 아닌 지금까지 내가 알고 있어요으로
[[email protected] ~]$ printf "a\n1\nb\n2\nc\n" | awk '/[[:digit:]]/'
1
2
[[email protected] ~]$
을 (뿐만 아니라 The One True Awk).
UPDATE :
으로 댓글에서 지적되었다, 일부 리눅스 배포판 mawk
가 awk
로 가장 설치되어있을 수 있습니다. mawk는 awk와 동일하지 않습니다. 그것은 기능보다는 실행 속도를 위해 설계된 최소한의 기능을 갖춘 awk 복제본입니다. 그리고 그것은 확장 정규 표현식을 지원 claims in its man page에도 불구하고, mawk의가, [:digit:]
, [:upper:]
, [:lower:]
처럼, POSIX "클래스"를 구현하기 위해 실패 등
당신이 표준 것들 대신에 mawk
같은 비표준 도구를 제공하는 시스템을 실행하는 경우, 재미있는 시간에 살기를 기대해야합니다. Awk 스크립트 개발자는 /usr/bin/awk
의 바이너리가 awk처럼 작동 할 것으로 기대합니다. 그렇지 않으면 시스템이 고장났습니다.
+1. '/ [0-9] /'도 사용할 수 있습니다. – ruakh
@sierrasdetandil - 예,이 지역에서의 mawk의 설명 할 수없는 실패는 오랫동안 지속되어 왔으며 많은 수의 시도가있었습니다 (https://bugs.launchpad.net/ubuntu/+source/mawk/+bug/). 69724). 사용자를 속일 수있는 최선의 조언은 당신의 도구를 알고 있어야하고 regexes에서 POSIX 문자 클래스를 사용하는 것이 좋다면 mawk를 사용하지 말라. – ghoti
사실, POSIX 문자 클래스 (즉, [[: digit :]])는 mawk <1.3.4에서 작동하지 않으며, 많은 배포판은 현재 1.3.3 (최신 데비안, 데비안, 우분투, 맨드리바 확인)과 함께 제공됩니다. 참고 : [mawk : POSIX 스타일의 문자 클래스를 구현하십시오.] (https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=65617); [Mawk는 표현에서 Posix 문자 클래스를 지원하지 않습니다.] (https://bugs.launchpad.net/ubuntu/+source/mawk/+bug/69724); http://unix.stackexchange.com/a/149059/29395. – sierrasdetandil
이 질문에 감사드립니다. 나는 awk 1-liner가 왜 작동하지 않는지 알아 내려고 20 분을 보냈다. – Jamie