句読点を含まないすべての行を印刷する正規表現パターンが必要です。
入力する:
.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
です¢
。