허용되는 문자 목록이 있습니다.
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
이 문자는 다음으로 번역될 수 있습니다.ASCII 십진수 범위33-73
내가 원하는 구현은 입력 파일의 행을 구문 분석하고 이 범위 밖의 문자를 감지하고 해당 행을 반환합니다.
grep -E '[^33-73]{1,}'
where -E
는 정규식 해석, ^
목록에 없는 문자 일치, {1,}
하나 이상의 일치 일치에 사용 [33-73]
되며 원하는 문자 범위를 10진수 형식으로 표현하는 방법입니다. 이것을 어떻게 표현해야 할지 모르겠습니다. 로 어느 정도 설명할 수 있다 grep
.
(정규식 자체에서 문자 목록을 정의할 수 있지만 grep -E
문자를 이스케이프 처리하면 표현식을 읽기가 더 어려워집니다.)
에서 이를 달성할 수 있는 방법이 있나요 grep
? (참고로, 작동시키려고 노력 중입니다 (BSD grep) 2.5.1-FreeBSD
)
입력 예:
$ cat f1.txt
(ABC123abc_
ABC!123)-
예상 출력:
(ABC123abc_
답변1
이는 ASCII의 연속 문자이므로 간단히 다음을 수행할 수 있습니다.
$ grep '[^!-I]' file
(ABC123abc_
또는 다른 로캘을 사용하는 경우 더 안전합니다.
$ LC_ALL=C grep '[^!-I]' file
(ABC123abc_