0

約20のnull許容列を含む〜で区切られたテキストファイルがあります。

次の条件が満たされた場合、SED(cygwinから)を使用して列11の値を「空白」にしようとしています...

  1. 列3はゼロ(0)です

  2. 列11は日付形式mm/dd / yyです(有効な日付であるかどうかはあまり気になりません)

これが私が試していることです...

s/\([^~]*~[^~]*~0~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~\)\(\d{2}\/\d{2}\/\d{2}~\)\(.*$\)/\1~\3/

ファイルのサンプルは次のとおりです。

Test A~7~1~~~~72742050~~~Z370~10/25/11~~~0~8.58563698~6.40910452~4.59198764~3.18239469~1.72955975~.23345372~-1.30891113~-2.89971394~1~0
Test B~7~0~~~~72742060~~~Z351~05/15/12~05/14/12~~0~18.88910518~12.69425528~9.96182381~6.76077612~6.76077612~3.86279298~.22449489~-.91021010~0~0
Test C~7~0~~~~72742060~~~Z352~06/12/12~ABC~~0~20.60845679~17.54889351~15.52912556~12.43279217~12.43279217~10.32033576~9.35296144~8.09245899~0~0

...そしてこれが私が取り戻すことを期待しているものです

Test A~7~1~~~~72742050~~~Z370~10/25/11~~~0~8.58563698~6.40910452~4.59198764~3.18239469~1.72955975~.23345372~-1.30891113~-2.89971394~1~0
Test B~7~0~~~~72742060~~~Z351~05/15/12~~~0~18.88910518~12.69425528~9.96182381~6.76077612~6.76077612~3.86279298~.22449489~-.91021010~0~0
Test C~7~0~~~~72742060~~~Z352~06/12/12~ABC~~0~20.60845679~17.54889351~15.52912556~12.43279217~12.43279217~10.32033576~9.35296144~8.09245899~0~0

しかし、ファイルは2行目で完全に変更されていません。

4

1 に答える 1

1

11列ではなく12列を置き換えようとしています。

\([^~]*~[^~]*~0~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~\)\(\d{2}\/\d{2}\/\d{2}~\)\(.*$\)
    1     2   3   4     5     6     7     8     9    10    11              12

最初のグループの最後からの1つを削除[^~]*~しても修正されない場合は、sedのバージョンがどちらか\dまたはの繰り返しをサポートしていないことが原因である可能性があります{2}(ただし、中括弧をエスケープすると修正される可能性があります)。

\d{2}これは、どこでも機能するはずのバージョンで、それぞれをに置き換えます[0-9][0-9](そして、上記の誤った列の問題を修正します)。

s/\([^~]*~[^~]*~0~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~[^~]*~\)\([0-9][0-9]\/[0-9][0-9]\/[0-9][0-9]~\)\(.*$\)/\1~\3/
于 2013-02-05T23:45:48.310 に答える