다음 문자가 포함된 줄을 검색하고 싶습니다.
:
/
/
?
#
[
]
@
!
$
&
'
(
)
*
+
,
;
=
%
답변1
grep "[]:/?#@\!\$&'()*+,;=%[]"
대괄호 표현식에서 "특수" 문자는 거의 없습니다( , 및 , 및 , 및 의 세 가지 조합 [...]
과 같은 매우 작은 하위 집합만 ). in을 포함하는 경우 먼저 와야 합니다(아마도 a 뒤에). 대칭을 위해 첫 번째와 마지막을 배치하기로 결정했습니다.]
-
^
[=
[:
[.
]
[...]
]
^
]
[
기억해야 할 또 다른 점은 작은 따옴표로 묶인 문자열에는 작은 따옴표를 포함할 수 없으므로 표현식 주위에 큰 따옴표를 사용한다는 것입니다. 큰따옴표로 묶인 문자열을 사용하고 있으므로 쉘은 확장을 위해 그 안에서 탐색합니다. 이러한 이유로 우리는 $
as를 이스케이프 \$
하여 쉘이 리터럴 값을 제공하게 하고 as 도 이스케이프합니다. $
이는 in의 역사적 확장이기 때문입니다 (비록 대화형 쉘 에서만 가능함 ).grep
!
\!
bash
bash
컬렉션에 백슬래시를 포함하려면 \\
셸이 단일 백슬래시를 제공 하도록 이를 이스케이프해야 합니다 grep
. 또한 백틱을 포함하려면 `
백틱도 이스케이프해야 합니다. \`
그렇지 않으면 명령 대체가 시작됩니다.
위 명령은 대괄호 표현식의 문자 중 하나 이상을 포함하는 모든 행을 추출합니다.
큰따옴표로 묶인 문자열 대신 작은따옴표로 묶은 문자열을 사용하면 문자를 해석하는 쉘의 문제 대부분을 해결할 수 있습니다.
grep '[]:/?#@!$&'"'"'()*+,;=%[]'
여기서 기억해야 할 유일한 점은 의 배치 외에 ]
작은 따옴표로 묶인 문자열에는 작은 따옴표를 포함할 수 없으므로 세 문자열을 연결하는 방법을 사용한다는 것입니다.
'[]:/?#@!$&'
"'"
'()*+,;=%[]'
또 다른 접근 방식은 POSIX 문자 클래스를 사용하는 것입니다 [[:punct:]]
. 이는 set 의 단일 문자와 일치합니다 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
.더 큰설정은 질문에 제공된 것보다 크지만(도 포함되어 있음 "-.<>^_`{|}~
) POSIX에서 정의한 모든 "구두점"입니다.
LC_ALL=C grep '[[:punct:]]'
답변2
[:punct:]
다른 구두점 및 특수 문자와도 일치하는 것이 마음에 들지 않으면 문자 클래스를 사용할 수 있습니다.
grep '[[:punct:]]' file
답변3
특수 문자인 문자를 찾는 경우 전체 정규식을 사용하여 대괄호 안의 특수 문자를 찾을 수 있습니다. 정규식을 연습하고, 학습하고, 확인할 수 있는 훌륭한 리소스는 다음과 같습니다.정규식101.com.
이는 다음 옵션과 함께 GNU grep과 함께 사용할 수 있는 Perl 정규식을 사용합니다 -P
.
grep -P "(\:|\/|\?|\#|\@|\!|\\$|\&|\'|\(|\)|\*|\+|\,|\;|\=|\%|\[|\])"
^^^
필요하신 점 참고해주세요둘달러 기호 앞의 백슬래시는 셸에서 특별한 의미를 갖기 때문에 첫 번째 백슬래시는 셸에서 이스케이프됩니다. (앞에 백슬래시가 있으면 쉘은 백슬래시를 제거하고 grep
이스케이프 처리되지 않은 달러 기호를 확인하여 줄의 끝을 나타내며 모든 입력 줄과 일치합니다.)
터미널에서 지원하는 경우 색상을 추가할 수도 있습니다.
grep --color=auto -P "(\:|\/|\?|\#|\@|\!|\\$|\&|\'|\(|\)|\*|\+|\,|\;|\=|\%|\[|\])"
내 정규식에 대한 설명은 다음과 같습니다.정규식101.com
/(\:|\/|\?|\#|\@|\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=|\%|\[|\])/gm 1st Capturing Group (\:|\/|\?|\#|\@|\!|\$|\&|\'|\(|\)|\*|\+|\,|\;|\=|\%|\[|\]) \: matches the character : literally (case sensitive) \/ matches the character / literally (case sensitive) \? matches the character ? literally (case sensitive) \# matches the character # literally (case sensitive) \@ matches the character @ literally (case sensitive) \! matches the character ! literally (case sensitive) \$ matches the character $ literally (case sensitive) \& matches the character & literally (case sensitive) \' matches the character ' literally (case sensitive) \( matches the character ( literally (case sensitive) \) matches the character ) literally (case sensitive) \* matches the character * literally (case sensitive) \+ matches the character + literally (case sensitive) \, matches the character , literally (case sensitive) \; matches the character ; literally (case sensitive) \= matches the character = literally (case sensitive) \% matches the character % literally (case sensitive) \[ matches the character [ literally (case sensitive) \] matches the character ] literally (case sensitive)