句読点を含まないすべての行を印刷できる正規表現パターンが必要です:
入力:
.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
ただし、句読点以外のすべての文字が表示されます。
回答:
あなたのgrep
印刷物以外の句読点文字を含むすべての行。これは、句読文字を含まないすべての行を印刷することと同じではありません。
後者の場合は、-v
スイッチが必要です(パターンに一致しない行を出力します)。
grep -v '[[:punct:]]' file.txt
なんらかの理由で-v
スイッチを使用したくない場合は、行全体が句読点以外の文字で構成されていることを確認する必要があります。
grep '^[^[:punct:]]\+$' file.txt
-v
ですか?
-v
もっと知りたいだけではありません:)
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
持っています¢
。
-v
スイッチを使わない方法はありますか?