空白に一致する正規表現パターンでegrepを使用しようとしています。
以前にPerlとC#でRegExを使用したことがあり、どちらも空白を検索するためのパターン\s
をサポートしています。 egrep(または少なくとも私が使用しているバージョン)はこのパターンをサポートしていないようです。
オンラインのいくつかの記事で速記[[:space:]]に出くわしましたが、これはうまくいかないようです。どんな助けでもありがたいです。
使用:SunOS 5.10
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
「劣化した」バージョンのgrepを使用している場合(私が取り組んでいるほとんどのUNIXは、「\s
」または「[[:space:]]
」の付いた派手なREではなく、元のREを使用しているため、この用語を引用します。 :-)、REの最も低い形式に戻すことができます。
たとえば、:space:
がスペースとタブとして定義されている場合は、次を使用します。
egrep '[ ^I]' file
その^I
は実際のタブ文字であり、^
とI
の2文字ではありません。
これは、:space:
isがタブとスペースとして定義されていることを前提としています。それ以外の場合は、[]
文字内の選択肢を調整してください。
機能低下したREを使用する利点は、それらがすべてのプラットフォームで機能することです(少なくともASCIIの場合。Unicodeまたは英語以外の言語では異なるルールがある場合がありますが、必要性はほとんどありません)。
Bashを使用している場合、タブを1行に配置する構文は次のとおりです。
$'foo\tbar'
私は最近、sedを使用してタブ区切りファイルの修正を行っていました。ファイルの一部は次のとおりです。
sed -E -e $'s/\t--QUOTE--/\t"/g'
その引数はbashによって解析され、sedはリテラルタブを持つ正規表現を参照します。
おそらく、パターンを引用符で保護する必要があります(bash、または使用しているシェルに相当するものの場合)。
[および]は、シェルにとって特別な意味を持つ場合があります。