22

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

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

オンラインのいくつかの記事で、省略形 [[:space:]] に出くわしましたが、これは機能していないようです。どんな助けでも大歓迎です。

使用: SunOS 5.10

4

5 に答える 5

25

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
于 2009-01-16T00:30:51.583 に答える
14

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

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

egrep '[ ^I]' file

これ^Iは実際のタブ文字であり、 と の 2 文字ではありませ^I

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

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

于 2009-01-16T00:52:28.527 に答える
3

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

$'foo\tbar'

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

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

その引数は bash によって解析され、sed はリテラル タブを含む正規表現を認識します。

于 2012-09-10T03:36:07.470 に答える
0

パターンを引用符で保護する必要があるかもしれません (bash の場合、または使用しているシェルと同等のものの場合)。

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

于 2009-01-15T23:51:56.247 に答える
-3
$ cat > file
this line has whitespace
thislinedoesnthave
$ egrep [[:space:]] file 
this line has whitespace

debian の下で動作します。

Solarisの場合、egrepバージョンをデフォルトに設定するための「eselect」(gentooを参照)または代替ファイルはありませんか?

grep -E を試しましたか? パス上にある egrep が適切でない場合は、grep が適切である可能性があります。

于 2009-01-15T23:47:43.917 に答える