파이프 문자가 포함된 정규식을 사용하여 grep을 시도하고 있습니다 |
. 그러나 예상대로 작동하지 않습니다. |
아래 첨부 이미지에 표시된 것처럼 정규식은 포괄적으로 일치하지 않습니다 .
이건 내 bash 명령이야
cat data | grep "{{flag\|[a-z|A-Z\s]+}}"
샘플 데이터는 다음과 같습니다
| 155||NA||{{flag|Central African Republic}}||2.693||NA||0.000||0.000||0.019||0.271||0.281||0.057||2.066
|{{flagicon|Kosovo}} ''[[Kosovo]]'' <ref name="KOS" group=Note>{{Kosovo-note}}</ref>
|{{flagicon|Somaliland}} [[Somaliland|Somaliland region]]
|{{flagicon|Palestine}} ''[[Palestinian Territories]]''{{refn|See the following on statehood criteria:
예상 출력은
| 155||NA||{{flag|Central African Republic}}||2.693||NA||0.000||0.000||0.019||0.271||0.281||0.057||2.066
그러나 그것을 테스트 한 결과Regex101.com, 예상대로 결과가 나왔습니다.
답변1
대체 검색 표현식(예: in , where match a literal ) 사이의 구분 기호로 grep
허용되는 것으로 보입니다 .\|
|
egrep
\|
|
그 외에도 당신의 표현에는 다른 문제가 있습니다.
+
egrep
(또는 ) 에서만 지원됩니다grep -E
.\s
문자 그룹 내에서는 지원되지 않습니다[]
.|
캐릭터 그룹에서는 필요성을 느끼지 못합니다 .
따라서 다음은 작동합니다 grep
:-
grep "{{flag|[a-zA-Z ][a-zA-Z ]*}}" <temp
아니면 (덕분에글렌 잭맨님의 입력):-
grep "{{flag|[a-zA-Z ]\+}}" <temp
egrep
문자 는 {}
특별한 의미를 가지므로 이스케이프해야 합니다.
egrep "\{\{flag\|[a-zA-Z ]+\}\}" <temp
불필요한 사용을 제거했습니다 cat
.
답변2
귀하의 요청은 포함된 줄을 추출하는 것 같습니다 flag|
. may를 사용하는 grep
것은 너무 복잡합니다.
여기에서 그것을 사용 sed
하고 awk
추출하기 위해 명령은 다음과 같습니다.
sed -r -n '/flag\|/p' /tmp/temp
awk 'match($0,/flag\|/){print}' /tmp/temp