문맥
SQL*Plus를 사용하여 긴 줄(8,000자 이상)이 포함된 덤프를 가져오려고 하므로 오류가 발생합니다 SP2-0027: Input is too long (> 2499 characters)
. 이는 하드 코딩된 제한 사항이므로 극복할 수 없습니다.
예상되는 솔루션
,
마지막(쉼표) 문자의 예상 너비보다 긴 bash 및 분할 줄로 입력을 스트리밍하고 싶습니다 .
그래서 나는 다음과 같은 것을 가져야합니다
cat my_dump.sql | *magic_command* | sqlplus system/oracle@xe
세부 사항
- 최신 버전에서는 최대 4999자까지 줄을 수용할 수 있다는 것을 알고 있지만 아직 줄이 더 깁니다(
grep '.\{5000\}' my_dump.sql | wc -l
). - 덤프를 수동으로 업데이트하는 것은 실제로 가능하지 않습니다.
- 나는 사용해 보았지만
tr
이것은 내가 원하지 않는 모든 행을 분할합니다 fmt
사용해 보았지만fold
사용자 정의 구분 기호를 사용하는 것이 불가능한 것 같습니다.- 현재 보고 있는데 " 2500자가 넘으면 처음 2500자 내에서 마지막 일치 항목을 찾습니다."
sed
에 대한 정규식을 찾을 수 없는 것 같습니다.,
답변1
다음과 같이 시도해 보세요:
sed -re '/.{2500}/ s/.{,2500},/&\n/g'
설명하다:
/.{2500}/
줄에 2,500자(또는 그 이상)가 포함된 경우...s/.{,2500},/&\n/g
최대 2,500자를 바꾼 후,
줄바꿈을 추가하세요.
이것이 대체 불가능한 ","를 대체하더라도 놀라지 않을 것입니다...
답변2
나는 다음과 같은 awk 명령이 작동할 것이라고 상상합니다:
awk 'length > 2499 {gsub(/.{0,2498},/, "&\n")} 1'
정규식은 쉼표 앞에 최대 2498자(즉, 쉼표를 포함하여 2499자)를 허용하고 그 뒤에 개행 문자를 삽입합니다. (오류 메시지에 해당 번호가 언급되어 있으므로 2499를 사용했습니다.)