0

以下のような数行のファイルがあります

ABCD|100.19000|90.100|1000.000010|SOMETHING
BCD|10.100|90.1|100.019900|SOMETHING

さて、sedこれを適用した後、出力を次のようにしたいと思います(さらに処理するために使用するため)

ABCD|100.19|90.1|1000.00001|SOMETHING
BCD|10.1|90.1|100.0199|SOMETHING

つまり、すべての末尾のゼロ ( の前のもの|) を結果から削除したいと考えています。

私は次のことを試しました:(regtestは上記の元のデータを含むファイルです)

cat regtest | sed 's/|\([0-9]*\)\.\([0-9]*\)0*|/|\1\.\2|/g'

貪欲だと思うのでうまくいきませんでした。

cat regtest | sed 's/|\([0-9]*\)\.\([0-9]*\)0|/|\1\.\2|/g'

動作します。ただし、このsedコマンドを同じファイルに繰り返し適用して、ゼロを次々と削除する必要があります。意味を成さない。

どうすればそれについて行くことができますか?ありがとう!

4

3 に答える 3

3
$ echo "ABCD100|100.19000|90.100|1000.000010|STH" | \
  sed -r -e 's/\|/||/g' -e 's/(\|[0-9.]+[1-9])0+\|/\1|/g' -e 's/\|\|/|/g'
ABCD100|100.19|90.1|1000.00001|STH
于 2011-08-02T18:29:20.600 に答える
0

Perl の拡張正規表現を使用する

perl -pe 's{\.\d*?\K0*(\||$)}{$1}g'

これにより、(ドットとオプションでいくつかの数字) と (パイプまたは行末) の間にあるゼロが削除されます。

于 2011-08-02T20:10:19.413 に答える