web-dev-qa-db-ja.com

空白のegrep検索

空白に一致する正規表現パターンでegrepを使用しようとしています。

以前にPerlとC#でRegExを使用したことがあり、どちらも空白を検索するためのパターン\sをサポートしています。 egrep(または少なくとも私が使用しているバージョン)はこのパターンをサポートしていないようです。

オンラインのいくつかの記事で速記[[:space:]]に出くわしましたが、これはうまくいかないようです。どんな助けでもありがたいです。

使用:SunOS 5.10

18
user32474

SunOS5.10でも同じ問題が発生します。 /usr/bin/egrepは拡張正規表現をサポートしていません。

/usr/xpg4/bin/egrepを使用してみてください:

$ echo 'this line has whitespace
thislinedoesnthave' | /usr/xpg4/bin/egrep '[[:space:]]'
this line has whitespace

別のオプションは、Perlを使用することかもしれません:

$ echo 'this line has whitespace
thislinedoesnthave' | Perl -ne 'chomp;print "$_\n" if /[[:space:]]/'
this line has whitespace
23
Jon Ericson

「劣化した」バージョンのgrepを使用している場合(私が取り組んでいるほとんどのUNIXは、「\s」または「[[:space:]]」の付いた派手なREではなく、元のREを使用しているため、この用語を引用します。 :-)、REの最も低い形式に戻すことができます。

たとえば、:space:がスペースとタブとして定義されている場合は、次を使用します。

egrep '[ ^I]' file

その^Iは実際のタブ文字であり、^Iの2文字ではありません。

これは、:space:isがタブとスペースとして定義されていることを前提としています。それ以外の場合は、[]文字内の選択肢を調整してください。

機能低下したREを使用する利点は、それらがすべてのプラットフォームで機能することです(少なくともASCIIの場合。Unicodeまたは英語以外の言語では異なるルールがある場合がありますが、必要性はほとんどありません)。

13
paxdiablo

Bashを使用している場合、タブを1行に配置する構文は次のとおりです。

$'foo\tbar'

私は最近、sedを使用してタブ区切りファイルの修正を行っていました。ファイルの一部は次のとおりです。

sed -E -e $'s/\t--QUOTE--/\t"/g'

その引数はbashによって解析され、sedはリテラルタブを持つ正規表現を参照します。

1
PaulMurrayCbr

おそらく、パターンを引用符で保護する必要があります(bash、または使用しているシェルに相当するものの場合)。

[および]は、シェルにとって特別な意味を持つ場合があります。

0
Giacomo