특정 레코드에서 선행 0 제거

특정 레코드에서 선행 0 제거

트레일러 레코드에서 앞에 오는 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|

관련 정보