特定のレコードから先行ゼロを削除

特定のレコードから先行ゼロを削除

トレーラーレコードから前のゼロを削除するだけです。

 H|09/24/2015
 D|25.00|Name1|Tfile|5
 D|7.25|Name2|Tfile|1
 T|032.25|03

私はこれを行うことができます:

 sed -e 's/T|0*/T|/g' SampleFileName

トレーラーの後ろの先行ゼロを削除しましたが、それ以降はT|32.25削除しませんでした03

ベストアンサー1

sedを使う

最後のフィールドのみを置き換えるには、正規表現を行末に固定する必要があります。

$ sed -Ee '/T/ s/[|]0*([[:digit:]]+)$/|\1/' SampleFileName
 H|09/24/2015
 D|25.00|Name1|Tfile|5
 D|7.25|Name2|Tfile|1
 T|032.25|03

$行末でのみ一致します。 (オプション)/T/条件は交換を包含に制限しますT

上記はGNU sedでテストされていますが、BSD(OSX)sedでも動作してほしいです。

awkを使う

awk は行をフィールドに分割します。 awkを使用すると、$NF最後のフィールドでのみ置換(awk call)を実行できます。

$ awk -F'|' '/T/{sub(/^0+/,"",$NF)} 1' OFS='|' SampleFileName 
 H|09/24/2015
 D|25.00|Name1|Tfile|5
 D|7.25|Name2|Tfile|1
 T|032.25|3

おすすめ記事