トレーラーレコードから前のゼロを削除するだけです。
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
答え2
Perl を oneliner コマンドとして使用することもできます。たとえば、この問題には以下を使用できます。
$ perl -p -e 'if (/^T/) { s/\|0*/\|/g } ' SampleFileName
H|09/24/2015
D|25.00|Name1|Tfile|5
D|7.25|Name2|Tfile|1
T|32.25|3
$
正規表現でif
行が文字で始まることを確認しT
(この行がターゲット行であると仮定するため)、ブロック正規表現{ }
で|
パイプの後ろのすべてのゼロを置き換えます。
答え3
別のPerlの説明:
perl -pe 's/\|0+(?=\d)/|/g if /^T\|/;'
上記はそれぞれとに翻訳されていますT|00|
。T|00.00|
T|0|
T|0.00|