我想要一个可以打印不包含标点符号的所有行的正则表达式模式:
输入:
.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 Chas 一样具有不同的标点符号¢。
-v开关的方法吗?