이 파일이 있습니다. 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자보다 긴 줄을 자릅니다.