我想要一个正则表达式模式,它可以打印所有不包含标点符号的行:
输入 :
.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 C
has ¢
。