Unix 명령을 사용하여 중국어 문자가 포함된 줄이나 ###이 포함된 줄을 인쇄하는 방법은 무엇입니까?

Unix 명령을 사용하여 중국어 문자가 포함된 줄이나 ###이 포함된 줄을 인쇄하는 방법은 무엇입니까?

텍스트 파일이 있고 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 pat2GNU 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, 향후 정규식 개선을 위해 전체 문자 클래스를 효과적으로 보존합니다.

https://raku.org

관련 정보