답변:
그것은 실제로 bash 매뉴얼에 있지만, 당신이 찾고있는 것을 아는 데 도움이되며, 당신이보고있는 것을 모른다면 도움 이되지 않습니다 . 검색 [[
하면 [[ expression ]]
조건식 섹션에 주의가 산만해질 것 입니다. 또한 검색 :space:
하면 동일한 섹션에있는 두 가지 예에서 사용자 를 착륙시킵니다. 이 예에서 breadcrumb을 따를 수 있습니다.
예를 들어, 값에 0, 공백 문자, 0 또는 1 개의 'a'인스턴스를 포함하여 숫자로 구성된 문자 시퀀스가있는 경우 다음은 행 (쉘 변수 행에 저장 됨)과 일치합니다. '비':
[[ $line =~ [[:space:]]*?(a)b ]]
... [[:space:]]
부분에서 "공백 문자"에 해당 하는 부분을 함께 모을 수 있지만, 문자가 전체 문자 클래스 가 아니라 문자 그대로의 공백 문자 라고 생각하면 용서받을 수 있습니다 .
온라인 bash 매뉴얼" space"
에서 문자열 (즉, 공백과 단어 "space")을 검색하면 ( 약 32 개의 일치 항목 만) 있습니다. 열 번째에 관해서는 여기에있을 것입니다 :
'['및 ']'내에서 문자 클래스는 구문 [: class :]을 사용하여 지정할 수 있습니다. 여기서 class는 POSIX 표준에 정의 된 다음 클래스 중 하나입니다.
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
문자 클래스는 해당 클래스에 속하는 모든 문자와 일치합니다.
그러면 "문자 클래스"라는 용어를 검색하고 찾을 수 있는 POSIX 표준으로 이동합니다.
wctype, wctype_l-문자 클래스를 정의합니다 .
wctype () [CX] [Option Start] 및 wctype_l () [Option End] 함수는 현재 로케일의 문자 유형 정보에 의해 정의 된 코딩 된 문자 세트의 규칙에 따라 wctype_t의 값을 결정해야합니다. [CX] [Option Start] 또는 로케일로 표시된 로케일에서 각각 [Option End] (카테고리 LC_CTYPE).
그런 다음 setlocale 링크 를 따라 가면 결국 Locale 섹션 에서 실제 답변을 얻을 수 있습니다 .
공간
공백 문자로 분류 할 문자를 정의하십시오. POSIX 로케일에는 정확하게
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
포함되어야합니다.로케일 정의 파일에서 키워드 upper, lower, alpha, digit, graph 또는 xdigit에 지정된 문자는 지정하지 않아야합니다.
<space>, <form-feed>, <newline>, <carriage-return>, <tab>, and <vertical-tab>
휴대용 문자 세트 및 클래스 빈에 포함 된 문자는 자동으로이 클래스에 포함되어 있습니다.
less +"$cmd"
. 고마워.
[]
가 내부와 무관 하다는 것을 받아들이지 않아서 용서받을 수있다 []
. 나는 운이 좋은 추측이 필요했지만 답변이 무엇인지에 대해 너무 많이 몰라도 질문에서 답으로가는 길을 찾으려고 노력했습니다! :
Bash만을위한 것이 아니라 POSIX 표기법의 일부입니다.
POSIX 란 무엇입니까?
POSIX 또는 "uniX 용 이식 가능 운영 체제 인터페이스"는 (UNIX) 운영 체제가 지원해야하는 일부 기능을 정의하는 표준 모음입니다. 이러한 표준 중 하나는 두 가지 맛의 정규 표현식을 정의합니다.
POSIX 브라켓 표현식
POSIX 대괄호 표현식은 특수한 종류의 문자 클래스입니다. POSIX 대괄호 표현식은 일반 문자 클래스처럼 문자 세트 중 하나의 문자를 찾습니다.
표준 POSIX
[[:alnum:]] Alphanumeric characters
[[:alpha:]] Alphabetic characters
[[:blank:]] Space and tab
[[:cntrl:]] Control characters
[[:digit:]] Digits
[[:graph:]] Visible characters (anything except spaces and control characters)
[[:lower:]] Lowercase letters
[[:print:]] Visible characters and spaces (anything except control characters)
[[:punct:]] Punctuation (and symbols).
[[:space:]] All whitespace characters, including line breaks
[[:upper:]] Uppercase letters
[[:xdigit:]] Hexadecimal digits
표준 없음
[[:ascii:]] ASCII characters
[[:word:]] Word characters (letters, numbers and underscores)
레거시 구문 (누군가 이것에 대한 참조를 찾을 수 있습니까?)
[[:<:]] Start of Word
[[:>:]] End of Word
자세한 정보는 여기에서 찾을 수 있습니다 : wiki
[[:ascii:]]
및 [[:word:]]
POSIX 클래스 (그들은 것 같다되지 않습니다 bash
- 특정), 내가 찾을 수 [[:<:]]
없고 [[:>:]]
중 하나. 더 좋은 참고 문헌은 pubs.opengroup.org/onlinepubs/9699919799/basedefs/…
[[:ascii:]]
그리고 [[:word:]]
아무도 표준 POSIX의 클래스입니다. for [[:<:]]
및 [[:>:]]
, 참조를 찾을 수 없지만 동일 \b
합니다. en.wikipedia.org/wiki/Regular_expression#Character_classes
[[:<:]]
: 그리고 그 주장 이 확장이다,와 호환하지만, POSIX 1003.2로 지정하지
[[:<:]]
FreeBSD에도 있으며 PostgreSQL과 같은 경고가 있습니다 : freebsd.org/cgi/…
[[:ascii:]]
및 [[:word:]]
패턴 매칭에 배쉬에서 작업 과정의,하지만 정규 표현식에서 (내 시스템에 적어도, 나는 배쉬 시스템의 정규식 라이브러리를 사용하여 생각). 바.
정규 표현식 및 파일 이름 glob / shell 패턴에서 [...]
구문은 괄호 안에 나열된 문자 중 하나와 일치합니다. 이러한 괄호 안에는 여러 개의 명명 된 표준 문자 문자 클래스를 사용할 수 있습니다. 그중 하나는 [:space:]
공백 문자와 일치합니다 ( \s
Perl 정규식 에서 와 같이 ). 예를 들어Bash 매뉴얼의 패턴 매칭
그래서, [[:space:]]
정규 표현식 또는 패턴 일치의 일부이며 공백과 일치합니다.
예를 들어 패턴 일치 (Bash 전용이 아닌 표준 쉘) :
case $var in
*[[:space:]]*) echo "'$var' contains whitespace";;
esac
또는 정규식 (Bash) :
if [[ $var =~ [[:space:]] ]]; then
echo "'$var' contains whitespace"
fi
대괄호 표현식 [...]
은 정규 표현식과 쉘 패턴에서 동일하게 작동 하지만 일반적으로 거의 동일 하지 않습니다 . ( case
및 [[ string == pattern ]]
사용 패턴 일치, [[ string =~ regex ]]
사용의 정규 표현식에).
정규 표현식은 또한, 그들은 예에서 사용하고 특정 쉘되지 않습니다 awk
와 sed
도 및 예에서 설명하는 리눅스 맨 페이지regex(7)
LESS=+'/Within \[ and \],' man bash
32 개의n
ext 명령 대신 수동으로 찾기가 더 쉽습니다 . :-).