2016-11-15 7 views
0

"空の文字"、#、または文字で始まる行を無視する正規表現を作成するにはどうすればよいですか?以下は、私が持っているデータのサンプルがあると私は(負または正)のみの数字で始まる行と一致する必要があります。正規表現:これらの文字で始まる行を無視する

0.000000 1.2712052472 0.8899021956 22.2458 265.2511402076 322.1539247218 -13.6281 -130.986 0.155342 0.889755 phaet_000227 
0.000000 1.2712052462 0.8899021922 22.2458 265.2511430964 322.1539209801 -13.6281 -130.986 0.155342 0.889755 phaet_000090 
0.000000 1.2712052476 0.8899022047 22.2458 265.2511396341 322.1539260295 -13.6281 -130.986 0.155342 0.889755 phaet_000111 
0.000000 1.2712052465 0.8899022229 22.2458 265.2511497521 322.1539197205 -13.6281 -130.986 0.155342 0.889755 phaet_000059 
Nplanets 9 Nparticles 500: alive 509/509 ejected 0 rmin 0 rmax 0 
Full close app checks 0/0 (0.000000%) BS fails 0 
Close apps 1 bounces 0 accretions 0 Max n/step 0 
Simulation time 0 going to -100000. 
Real time 1 s Force 0 s (0.00 %) Coll 0 s (0.00 %) 
       E&L 0 s (0.00 %) Kep 0 s (0.00 %) 
CPU time 0.037627 s Force 0 s (0.00 %) Coll 0 s (0.00 %) 
       E&L  0 s (0.00 %) Kep 0 s (0.00 %) 
# Nplanets 9 Nparticles 500: alive 509/509 ejected 0 rmin 0 rmax 0 
# Full close app checks 0/0 (0.000000%) BS fails 0 
# Close apps 1 bounces 0 accretions 0 Max n/step 0 
# Simulation time 0 going to -100000. 
# Real time 1 s Force 0 s (0.00 %) Coll 0 s (0.00 %) 
#    E&L 0 s (0.00 %) Kep 0 s (0.00 %) 
# CPU time 0.037627 s Force 0 s (0.00 %) Coll 0 s (0.00 %) 
#    E&L  0 s (0.00 %) Kep 0 s (0.00 %) 
Output step 1 at t=-10 going to -100000 
-10.000000 1.2713031501 0.8900442847 22.1802 265.4033924020 322.0041354013 -5.32091 -102.357 0.155286 0.88482 phaet_000065 
-10.000000 1.2713031508 0.8900443093 22.1802 265.4033954804 322.0041360861 -5.32091 -102.357 0.155286 0.88482 phaet_000299 
-10.000000 1.2713031483 0.8900442977 22.1802 265.4033839221 322.0041469420 -5.32092 -102.357 0.155286 0.88482 phaet_000102 
-10.000000 1.2713031486 0.8900442931 22.1802 265.4033724632 322.0041581369 -5.32092 -102.357 0.155286 0.884821 phaet_000371 
-10.000000 1.2713031463 0.8900442910 22.1802 265.4033772870 322.0041532421 -5.32093 -102.357 0.155286 0.884821 phaet_000019 

私は最終的に持っていると思います。だから、

0.000000 1.2712052472 0.8899021956 22.2458 265.2511402076 322.1539247218 -13.6281 -130.986 0.155342 0.889755 phaet_000227 
0.000000 1.2712052462 0.8899021922 22.2458 265.2511430964 322.1539209801 -13.6281 -130.986 0.155342 0.889755 phaet_000090 
0.000000 1.2712052476 0.8899022047 22.2458 265.2511396341 322.1539260295 -13.6281 -130.986 0.155342 0.889755 phaet_000111 
0.000000 1.2712052465 0.8899022229 22.2458 265.2511497521 322.1539197205 -13.6281 -130.986 0.155342 0.889755 phaet_000059 
-10.000000 1.2713031501 0.8900442847 22.1802 265.4033924020 322.0041354013 -5.32091 -102.357 0.155286 0.88482 phaet_000065 
-10.000000 1.2713031508 0.8900443093 22.1802 265.4033954804 322.0041360861 -5.32091 -102.357 0.155286 0.88482 phaet_000299 
-10.000000 1.2713031483 0.8900442977 22.1802 265.4033839221 322.0041469420 -5.32092 -102.357 0.155286 0.88482 phaet_000102 
-10.000000 1.2713031486 0.8900442931 22.1802 265.4033724632 322.0041581369 -5.32092 -102.357 0.155286 0.884821 phaet_000371 
-10.000000 1.2713031463 0.8900442910 22.1802 265.4033772870 322.0041532421 -5.32093 -102.357 0.155286 0.884821 phaet_000019 

、私が試しました

grep -v '^[a-z,A-Z,\s,\#]' file1.dat > file2.dat 

をそれは文字と「#」で始まる行を取り除きますが、空白で始まる行はまだ存在している、つまり、私は削除することはできません:

を次のように「grepを」
 E&L 0 s (0.00 %) Kep 0 s (0.00 %) 
     E&L  0 s (0.00 %) Kep 0 s (0.00 %) 

"E & L"の前に空白があることに注意してください。

どのようにこれらを取り除くこともできますか?

答えて

0

[\s,\#]はバックスラッシュ、コンマ、またはハッシュ記号と一致します。 (バックスラッシュは括弧の式では特別な意味を持ちません。コンマは特別なものではありません)。空白と一致させる最も簡単な方法は、文字クラス[:space:]です。だからあなたの正規表現は次のようになります。

^[a-zA-Z#[:space:]] 

また、数字で開始を行うラインのための肯定的検索を行うことができます:

^-\?[[:digit:]]\+\.[[:digit:]]\+ 
+0

私はこのソリューションが最高だと思います。ありがとうございました。 – user3578925

0

先頭の空白のために、これらの2行は削除されません。 最初は削除できます。

sed "s/^[ \t]*//" file1.dat > file3.dat 

次に、ファイルをフィルタリングするために 'grep'コマンドを使用します。 grepので

grep -v '^[a-z,A-Z,\s,\#]' file3.dat > file2.dat 
+0

本当にありがとうございました。 – user3578925

関連する問題