我想要一个可以打印不包含标点符号的所有行的正则表达式模式:
输入:
.This is line 1
This is ! line 2
This is line (3)
This is line 4
输出:(应为)
This is line 4
到目前为止我尝试过的是:
grep '[^[:punct:]]' file.txt
但是它会显示所有不是标点符号的字符。
我想要一个可以打印不包含标点符号的所有行的正则表达式模式:
输入:
.This is line 1
This is ! line 2
This is line (3)
This is line 4
输出:(应为)
This is line 4
到目前为止我尝试过的是:
grep '[^[:punct:]]' file.txt
但是它会显示所有不是标点符号的字符。
Answers:
您将grep
打印所有包含非标点字符的行。这与打印不包含标点字符的所有行不同。
对于后者,您需要-v
切换(打印与模式不匹配的行):
grep -v '[[:punct:]]' file.txt
如果由于某种原因您不想使用该-v
开关,则必须确保整行包含非标点符号:
grep '^[^[:punct:]]\+$' file.txt
-v
?
-v
只是想了解更多:)
一个Perl
:
perl -nle 'print unless /\p{XPosixPunct}/' file
这将匹配-!“#$%&'()* +,。/ :; <=>?@ [\] ^ _` {|}〜,而unicode则考虑了标点和符号。
要么:
perl -nle 'print unless /\p{Punct}/' file
\p{Punct}
仅匹配-!“#%&'()*,。/:;?@ [\] _ {},缺少$ + <=> ^`|〜,而unicode将其视为Symbols。
perl
默认情况下使用POSIX语言环境。如果不使用perl
,则应全部设置好LC_ALL=POSIX
,因为不同的区域可以像SAA C
has 一样具有不同的标点符号¢
。
-v
开关的方法吗?