句読点を含まないすべての行を印刷します


8

句読点を含まないすべての行を印刷できる正規表現パターンが必要です:

入力:

.This is line 1
This is ! line 2
This is line (3)
This is line 4

出力:(する必要があります)

This is line 4

これまでに試したこと:

grep '[^[:punct:]]' file.txt

ただし、句読点以外のすべての文字が表示されます。

回答:


11

あなたのgrep印刷物以外の句読点文字を含むすべての行。これは、句読文字を含まないすべての行を印刷することと同じではありません。

後者の場合は、-vスイッチが必要です(パターンに一致しない行を出力します)。

grep -v '[[:punct:]]' file.txt

なんらかの理由で-vスイッチを使用したくない場合は、行全体が句読点以外の文字で構成されていることを確認する必要があります。

grep '^[^[:punct:]]\+$' file.txt

+1ありがとうございます。-vスイッチを使わない方法はありますか?
Hamed Kamrava 14

@HamedKamravaはい。私の編集を見てください。
ジョセフR.

@HamedKamrava好奇心から:なぜあなたは避けたいの-vですか?
Bernhard

私は-vもっと知りたいだけではありません:)
Hamed Kamrava 14

@HamedKamrava問題が解決した場合は、この回答を「承諾済み」にすることを忘れないでください。
ジョセフR.

1

sedでは次のようなことができます:

sed '/[[:punct:]]/!d'

awkでできること:

awk '!/[[:punct:]]/'


1

Aの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持っています¢

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.