이것이 제가 SunOS에서 달성하고 싶은 것입니다:
[text_text=text]
[text=text]
, [text]
또는 같은 패턴만 text
유효한 패턴입니다. 즉, text
에 있는 모든 패턴을 의미합니다 0-9,a-z,A-Z, space, newline, tab, enter
. 다른 모드는 유효하지 않습니다. 즉, egrep -v
캡처해야 합니다. [[[text]
, [text]]]
, , 같은 [text
패턴 text]
도 유효하지 않습니다.
Linux 상자(RHEL)에서 다음 명령을 사용했는데 제대로 작동했습니다.
egrep -v "^[ ]*([a-zA-Z0-9\t\n\v\f\r ]*|\[{1}[_a-zA-Z0-9\t\n\v\f\r ]*(=[a-zA-Z0-9\t\n\v\f\r ]*)?\]{1})[ ]*$" file1
파일 1:
[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
001203658080400160b9d0ae45000080
[CRC]
c068
RHEL BOX에서 egrep -v
위 명령문은 예상대로 출력을 제공하지 않습니다.
동일한 작업이 작동하지 않고 출력을 제공하므로 Solaris에서 이를 어떻게 달성할 수 있습니까?
[FEATURE_ID=2]
[FEATURE_REV=1]
[NO_OF_BYTES=18]
[CRC]
답변1
Solaris의 경우와 마찬가지로 /usr/bin/egrep
POSIX와 호환되지 않는 레거시 구현이 /usr/xpg4/bin/egrep
있지만 POSIX와 호환되는 구현이 있으며 POSIX 외에는 거의 아무것도 없습니다. 기존 POSIX 이전 Solaris 응용 프로그램을 실행하지 않는 한 다음 사항을 확인하십시오./usr/xpg4/bin
전에 /usr/bin
당신의$PATH
.
GNU 도구(Linux에서 익숙한 도구)에는 POSIX에서 지정한 것 이상의 많은 기능이 있는 경우가 많습니다. 이식성이 필요하다면 POSIX를 사용하세요. POSIX에는 정의가 없습니다 egrep
. 이는 광범위한 동의어입니다.grep -E
, 즉 grep
,확장 정규식통사론.
Solaris는 발생 횟수 계산을 /usr/bin/egrep
지원하지 않습니다 {…}
. 여기서 만 {1}
사용하고 효과가 없으니 그냥 버리시면 됩니다.
egrep
Solaris나 Solaris에서의 구현에서는 grep -E
제어 문자의 백슬래시 이스케이프를 지원하지 않습니다. 이것은 GNU 확장입니다. POSIX는 백래시 문자를 정의하지 않습니다. [:space:]
대신 클래스를 사용하십시오 \t\n\v\f\r
.
LC_CTYPE=C grep -Ev '^[ ]*([[:alnum:][:space:]]*|\[[_[:alnum:][:space:]]*(=[[:alnum:][:space:]]*)?\])[ ]*$' file1