打印所有不包含标点符号的行

打印所有不包含标点符号的行

我想要一个正则表达式模式,它可以打印所有不包含标点符号的行:

输入 :

.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

这将匹配-!"#$%&'()*+,./:;<=>?@[\]^_`{|}~unicode 考虑标点符号和符号。

或者:

perl -nle 'print unless /\p{Punct}/' file

\p{Punct}仅匹配-!"#%&'()*,./:;?@[\]_{}, 丢失的$+<=>^`|~哪些 unicode 考虑符号。

perl默认情况下使用 POSIX 语言环境。如果您不使用perl,则应该全部如此设置LC_ALL=POSIX,因为不同的语言环境可以有不同的标点符号,例如SAA Chas ¢

相关内容