트레일러 레코드에서 앞에 오는 0을 제거하면 됩니다.
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
트레일러 뒤에 있는 선행 0을 제거했지만 이후에는 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
(이 줄이 대상 줄이라고 가정하므로) { }
블록 정규식 에서 |
파이프 뒤의 모든 0을 바꿉니다.
답변3
또 다른 Perl 설명:
perl -pe 's/\|0+(?=\d)/|/g if /^T\|/;'
위의 내용은 각각 및로 번역됩니다 T|00|
.T|00.00|
T|0|
T|0.00|