다음 형식의 고정 너비 파일이 있습니다.
012019-06-03070005000799111160300000030XXXXXXX0700000000030
012019-06-03070005000799165030700000030XXXXXXX0700000000030
012019-06-03070005000799175500700000030XXXXXXX0700000000030
022019-06-030007276384I06000000000000207000991755007000000300
022019-06-030007276384I06000000000000107000991755007000000300
012019-06-03070005000799175840700000030XXXXXXX0700000000030
022019-06-030007276384I06000000000000407000991758407000000300
022019-06-030007276384I06000000000000307000991758407000000300
012019-06-03070005000799194080700000030XXXXXXX0700000000030
012019-06-03070005000790035750700000030XXXXXXX0700000000030
012019-06-03070005000790036660700000030XXXXXXX0700000000030
02로 시작하는 줄을 처리해야 하고 20번째 위치부터 50번째 위치까지의 문자를 "MMMM"으로 바꾸고 공백을 50번째 위치까지 유지해야 합니다.
내 출력은 다음과 같아야합니다
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
022019-06-03000727638MMMM 70000003
022019-06-03000727638MMMM 70000003
012019-06-03070005000MMMM 00000030
022019-06-03000727638MMMM 70000003
022019-06-03000727638MMMM 70000003
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
시도해 보았는데, sed -Ee '/^02"s/((.20).{30}/\1$(printf "%-30s" MMMM)/"'
and로 시작하는 레코드를 대체하지만, and로 시작하는 레코드를 처리하고 싶습니다.01
02
02
답변1
이 시도,
옵션 1:당신의 필요에 따라산출
sed "s/\(.\{21\}\)\(.\{30\}\)\(.\{8\}\)\(.*\)/\1$(printf "%-30s" MMMM)\3/" file
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
022019-06-03000727638MMMM 70000003
022019-06-03000727638MMMM 70000003
012019-06-03070005000MMMM 00000030
022019-06-03000727638MMMM 70000003
022019-06-03000727638MMMM 70000003
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
012019-06-03070005000MMMM 00000030
(.\{21\}\)
처음 21자는 다음 위치에 저장됩니다.\1
(.\{30\}\)
다음 30자는 다음 문자에 저장됩니다.\2
(.\{8\}\)
다음 8자는 다음에 저장됩니다.\3
(.*\)
나머지는 다음 위치에 저장됩니다.\4
- 그런 다음 \1\2\3\4를 \1$(printf "%-30s" MMMM)\3으로 바꿉니다.
옵션 2:당신의 상황에 따라
sed "/^02/ s/\(.\{19\}\)\(.\{31\}\)\(.*\)/\1$(printf "%-30s" MMMM)\3/" file
012019-06-03070005000799111160300000030XXXXXXX0700000000030
012019-06-03070005000799165030700000030XXXXXXX0700000000030
012019-06-03070005000799175500700000030XXXXXXX0700000000030
022019-06-030007276MMMM 07000000300
022019-06-030007276MMMM 07000000300
012019-06-03070005000799175840700000030XXXXXXX0700000000030
022019-06-030007276MMMM 07000000300
022019-06-030007276MMMM 07000000300
012019-06-03070005000799194080700000030XXXXXXX0700000000030
012019-06-03070005000790035750700000030XXXXXXX0700000000030
012019-06-03070005000790036660700000030XXXXXXX0700000000030
/^02/
줄이 "02"로 시작하는 경우에만 교체가 발생합니다.(.\{19\}\)
처음 19자는 다음 위치에 저장됩니다.\1
(.\{31\}\)
다음 31자는 다음에 저장됩니다.\2
(.*\)
나머지는 다음 위치에 저장됩니다.\3
- 그런 다음 \1\2\3을 \1$(printf "%-30s" MMMM)\3으로 바꿉니다.