sed에서 문자만 채우는 방법

sed에서 문자만 채우는 방법

이 파일이 있습니다. awk가 아닌 sed를 사용하고 싶습니다

FSDFDSFSD
FDSFD
FHGDHFDHGHFGHGHGF
HHGDF
GFDGDFGFDG
GFDGFDGFDGDFGDGD

행당 총 문자 수가 30이 되도록 모든 홀수 행을 000으로 채우고 싶습니다.

나는 이런 출력을 원한다

FSDFDSFSD0000000000
FDSFD
FHGDHFDHGHFGHGHGF00
HHGDF
GFDGDFGFDG000000000
GFDGFDGFDGDFGDGD

답변1

일방 통행:

sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file

모든 문자(.)와 일치하며, 동일한 유형(1, 29)의 1~29개 문자와 일치합니다. 일치에 성공하면 match &() 패턴에 '0'이 추가됩니다. 일치가 실패하면, 즉 첫 번째 문자를 제외한 문자 수가 29를 초과하면 일치가 중지되므로 0으로 채워진 30 문자열을 얻습니다.

n마지막으로 다음 줄을 읽고 인쇄하세요. 이 방법으로 짝수 줄을 영향 없이 인쇄할 수 있습니다.

위 스크립트를 실행합니다.

$ sed -e :a -e 's/^.\{1,29\}$/&0/;ta' -e n file
FSDFDSFSD000000000000000000000
FDSFD
FHGDHFDHGHFGHGHGF0000000000000
HHGDF
GFDGDFGFDG00000000000000000000
GFDGFDGFDGDFGDGD

답변2

또 다른 방법:

sed 's/$/000000000000000000000000000000/;s/\(.\{30\}\).*/\1/;n'

이는 한 번에 한 문자를 추가하는 반복 방법보다 빠르지만 먼저 30자보다 긴 줄을 자릅니다.

관련 정보