
텍스트 파일이 있고 Unix 명령(어느 것인지는 상관 없음)을 사용하여 중국어 문자가 포함된 줄이나 ### 문자열이 포함된 줄을 인쇄하고 싶습니다.
이 답변중국어 문자가 포함된 줄을 인쇄할 수 있는 grep 명령이 있습니다.
grep -P '[\p{Han}]' filename.txt
나는 이것이 Perl 정규 표현식이라는 것을 알고 있습니다. 그러면 ###이 포함된 줄이 인쇄됩니다.
grep '###' filename.txt
하지만 나는 그것들을 어떻게 결합(또는)하는지 모르겠습니다. grep -e '###' -P '[\p{Han}]'
내가 기대하는 대로 한다면이 답변간단히 말해서, 한자가 포함된 줄은 인쇄되지 않습니다.
질문: Unix 명령을 사용하여 중국어 문자가 포함된 줄이나 ###이 포함된 줄을 인쇄하는 방법은 무엇입니까?
아 혹시 도움이 되셨으면 해서 파일에
中文 keep this line
### keep this line
don't keep this line
그것은 출력되어야한다
中文 keep this line
### keep this line
답변1
일반적으로 -e pat1 -e pat2
GNU grep 버전 3.4를 사용하여 여러 패턴을 결합할 수 있지만 적어도 GNU grep 버전 3.4의 경우 전역 -P
옵션은 단일 패턴만 허용합니다.
$ grep -P -e '[\p{Han}]' -e '###' filename.txt
grep: the -P option only supports a single pattern
따라서 정규식에 대체 항목을 넣어야 합니다.
grep -P -e '[\p{Han}]|###' filename.txt
그렇지 않으면
grep -P '\p{Han}|###' filename.txt
( 단일 패턴의 경우 는 선택 사항이며 다음이 없으면 -e
대괄호 표현식을 사용할 필요가 없습니다.[ ]
놓다일치시킬 문자 또는 속성).
또는 예를 들어 Perl의 정규식을 직접 사용하는 것을 선호할 수도 있습니다.
perl -CDS -ne 'print if /\p{Han}/ or /###/' filename.txt
답변2
GNU grep은 이 옵션을 사용할 때 다중 모드를 지원하지 않습니다 -P
(Steeldriver가 제안하는 방식 제외).립그렙여러 패턴이 지원됩니다(확장 정규 표현식이 활성화되었습니다).
rg -N -e '[\p{Han}]' -e '###' filename.txt
답변3
사용행복하다(이전 Perl_6)
Han
스크립트가 포함된 줄만 원하는 경우 문자가 포함된 줄을 grep
선택하세요 . <:Script<Han>>
사용은 |
다른 정규식 패턴과의 교대를 제공합니다.
raku -ne '.put if .grep( / <:Script<Han>> | \#**3 / );'
또는
raku -ne '.put if .grep( / <:Script<Han>> / | / \#**3 / );'
또는
raku -ne '.put if .grep( / <:Script<Han>> / ) | .grep( / \#**3 / );'
입력 예:
中文 keep this line
### keep this line
don't keep this line
출력 예(3개 코드 예 모두):
中文 keep this line
### keep this line
Raku 정규식의 이스케이프 문자에 대한 간략한 참고 사항:
기본적으로 모든 비문 alnum
자는 문자 그대로의 의미를 유지하기 위해 인용되거나 이스케이프되어야 합니다. 따옴표가 없거나 이스케이프되지 않은 문자는 특별한 의미를 갖는 것으로 간주됩니다. 예를 들어 .
이스케이프되지 않은 점은 모든 문자를 나타내지만 \.
이스케이프된 점은 리터럴 점 문자를 나타냅니다.
이 규칙은 이스케이프되지 않은 비문자가 지정된 정규식 의미를 갖는지 여부에 관계없이 적용됩니다. 즉 alnum
, 향후 정규식 개선을 위해 전체 문자 클래스를 효과적으로 보존합니다.