구두점을 포함하지 않는 모든 줄을 인쇄하는 정규식 패턴을 원합니다.
입력하다:
.This is line 1
This is ! line 2
This is line (3)
This is line 4
산출:( 해야 한다)
This is line 4
내가 지금까지 시도한 것 :
grep '[^[:punct:]]' file.txt
하지만 문장 부호가 아닌 문자는 모두 표시됩니다.
답변1
grep
구두점이 아닌 문자가 포함된 모든 줄을 인쇄합니다 . 이는 구두점을 포함하지 않는 모든 줄을 인쇄하는 것과 다릅니다.
후자의 경우 -v
스위치가 필요합니다(패턴과 일치하지 않는 줄 인쇄).
grep -v '[[:punct:]]' file.txt
어떤 이유로 이 스위치를 사용하지 않으려면 -v
전체 줄이 구두점이 아닌 문자로 구성되어 있는지 확인해야 합니다.
grep '^[^[:punct:]]\+$' file.txt
답변2
sed에서는 다음과 같이 할 수 있습니다:
sed '/[[:punct:]]/!d'
awk에서는 다음과 같이 할 수 있습니다.
awk '!/[[:punct:]]/'
답변3
하나 Perl
:
perl -nle 'print unless /\p{XPosixPunct}/' file
이것은 일치합니다-!"#$%&'()*+,./:;<=>?@[\]^_`{|}~유니코드는 구두점과 기호를 고려합니다.
또는:
perl -nle 'print unless /\p{Punct}/' file
\p{Punct}
일치만-!"#%&'()*,./:;?@[\]_{}, 잃어버린$+<=>^`|~어떤 유니코드 기호가 고려됩니까?
perl
기본적으로 POSIX 로케일이 사용됩니다. 이를 사용하지 않는 경우에는 perl
모두 다음과 같이 설정해야 합니다 LC_ALL=POSIX
. 왜냐하면 서로 다른 로케일은 서로 다른 구두점을 가질 수 있기 때문 SAA C
입니다 ¢
.