2

正規表現を使用して、数値以外の部分を含むファイル内の文字列を検索したいと思います。

これは良い文字列になりますIDxxxxxx0123456789

これは悪い文字列になりますIDxxxxxx01234?6789

私がgrepしているファイルには多くの異なるテキスト行があり、IDxxxxxxに準拠するものに特に興味があり、10桁になると思います。10桁がすべての桁ではない行を見つけたい。

私はこれまでにこれを持っています、

 grep "ID.\{6\}[^0-9]" myFile

IDxxxxxxの後の最初の文字が数値以外の場合、これは正常に機能します。そこで、これを次のように拡張しました。

 grep "ID.\{6\}[^0-9]\{1,10\}" myFile

IDxxxxxxこれは、1〜10個の非数字が続くことを意味することを望んでいました。これは、最初の文字が数値ではない場合でも機能しますが、2番目の文字は機能しません。

私は近づいているに違いないと思いますが、十分に近づいていません。誰かがこれで私を少し操縦できますか?私はこれを守り、誰かが答える前に答えを見つけたら、見つけたものを投稿します。

期待してくれてありがとう

(更新-すべての不良文字列をgrepしたい)

4

3 に答える 3

2
  grep -Po '\bID.{6}(?!\d{10}).{10}\b' inputFiles
于 2012-06-16T13:37:44.757 に答える
0

あなたは[^0-9]と書いていますが、^「すべての文字ですが、後続の文字の1つではありません」という意味です。したがって、次のように変更する必要があります。

"ID.{6}[0-9]{1,10}\b"

ちなみに、最初の文字列が数値でない場合は、数値以外の文字でなければならない範囲{1,10}があるため、文字列は一致します。

さらに、を追加する必要があります\b。それ以外の場合は、2番目の文字列と一致します。代わりに、を使用\bすると、数字の後にスペース、コンマ、または文字列を終了する何かが必要であり、他の文字は必要ないということです。

于 2012-06-16T13:38:09.720 に答える
0

これがあなたの文字列です:

$> cat ./text 
This would be a good string IDxxxxxx0123456789
This would be a bad string IDxxxxxx01234?6789

アイデアは--invert-matchフラグを使用することです。

$> grep --perl-regex --invert-match "ID.{6}[0-9]{10}" ./text 
This would be a bad string IDxxxxxx01234?6789
于 2012-06-16T13:31:58.403 に答える