空白に一致する正規表現パターンで 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
\s
「劣化した」バージョンの grep を使用している場合 (この用語を引用するのは、私が取り組んでいる UNIX のほとんどが、" " や " "を使用した凝ったものではなく、元の RE を使用しているため[[:space:]]
です :-)、 REの最低形。
たとえば、:space:
がスペースとタブとして定義されている場合は、次を使用します。
egrep '[ ^I]' file
これ^I
は実際のタブ文字であり、 と の 2 文字ではありませ^
んI
。
これは、がタブとスペースとして定義されていることを前提としています。それ以外の場合は、文字内の選択肢を調整して:space:
ください[]
。
劣化した RE を使用する利点は、それらがすべてのプラットフォームで動作することです (少なくとも ASCII の場合。Unicode または英語以外の言語には異なる規則があるかもしれませんが、必要性はほとんどありません)。
bash を使用している場合、タブを 1 行に配置する構文は次のとおりです。
$'foo\tbar'
最近、sed を使用して、タブ区切りファイルの修正を行っていました。ファイルの一部は次のとおりです。
sed -E -e $'s/\t--QUOTE--/\t"/g'
その引数は bash によって解析され、sed はリテラル タブを含む正規表現を認識します。
パターンを引用符で保護する必要があるかもしれません (bash の場合、または使用しているシェルと同等のものの場合)。
[ と ] は、シェルにとって特別な意味を持つ場合があります。
$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file
this line has whitespace
debian の下で動作します。
Solarisの場合、egrepバージョンをデフォルトに設定するための「eselect」(gentooを参照)または代替ファイルはありませんか?
grep -E を試しましたか? パス上にある egrep が適切でない場合は、grep が適切である可能性があります。