0

このようなデータを持つファイルがあります

34sdf, 434ssdf, 43fef,
34sdf, 434ssdf, 43fef, sdfsfs,

を特定しsdfsfs,て置換するか、行を印刷する必要があります。

The exact condition is the tokens are comma separated. target expression starts with a non numeric character, and till a comma is met. 

今、私[^0-9]は数字以外の文字から始めますが、次の文字は私には本当にわかりません。数字、特殊文字、アルファベット、またはスペースでさえあります。だから私は欲しかった(anything)*。しかし、前の[]ものが出てきて、それを台無しにします。[^0-9]*または[^0-9].*,または[^0-9]\+.*,または[^0-9]{1}*,または[^0-9][^,]*または[^0-9]{1}[^\,]*,今まで何も機能しませんでした。したがって、私の質問は、このための正規表現を作成する方法です(数値以外の文字を開始し、次にコンマを除く任意の文字またはコンマまでの任意の数の文字)grep、およびsed(gnu)を使用しています。別の質問は、posix または non-posix に関するものです。違いはありますか?

4

4 に答える 4

1

もしかしてそういうこと?

(?:(?:^(\D.*?))|(?:,\s(\D.*?))),

これにより、数字以外の文字で始まる文字列がキャプチャされます。ここでテスト済み。

sed が をサポートしているかどうかはわかりませんが、サポートしていない場合は、既に知っているもの\Dに簡単に置き換えることができます。[^0-9]

編集:次のようにトリミングできます:

(?:\s|^)(\D.*?),
于 2013-05-22T08:35:48.387 に答える
0

sed を使用し、最後の正規表現をわずかに変更します。

sed -n 's/.*,[ ]*\([^ 0-9][^\,]*\),/\1/p' input
于 2013-05-22T08:24:42.143 に答える
0

(\s|^)(\D[^,]+),パターンはそれをキャッチすると思います。

これは、空白または文字列の先頭と数字以外のグループの後にカンマ以外が続き、その後にカンマが続くグループに一致します。

がサポートされていない[^0-9]場合に使用できます。\D

于 2013-05-22T08:36:59.693 に答える