sed를 사용하여 여는 대괄호 뒤에 SQL 쿼리에 사용할 텍스트 파일의 작은따옴표를 삽입합니다.

sed를 사용하여 여는 대괄호 뒤에 SQL 쿼리에 사용할 텍스트 파일의 작은따옴표를 삽입합니다.

나는어디Unix 파일의 절 문자열은 다음과 같습니다.

where c1 in (a) and c2 in (a,b,c) and c3 in ()

필요한 출력은 다음과 같습니다.

where c1 in ('a') and c2 in ('a','b','c') and c3 in ('')

누군가가 이것을 끝낼 수 있다면 좋을 것입니다.

답변1

sed -r "s/,/','/g; s/\(([^)]+)\)/('\1')/g"

제공한 입력이 어떻게 변경되는지 살펴보겠습니다.

where c1 in (a) and c2 in (a,b,c) and c3 in ()

먼저 쉼표는 따옴표 s/,/','/g( )로 묶습니다.

where c1 in (a) and c2 in (a','b','c) and c3 in ()

그런 다음 비어 있지 않은 대괄호( ) s/\(([^)]+)\)/('\1')/g안에 따옴표를 추가합니다 .

where c1 in ('a') and c2 in ('a','b','c') and c3 in ()

...원하는 결과입니다.

이 정규식은 원하지 않는 방식으로 다른 줄에 영향을 미칠 수 있으므로 주의하세요.

답변2

루프를 사용하여 이 작업을 수행할 수도 있습니다.

sed -e ':top' -e 's/\([(,]\)\([^),'\'']\{1,\}\)\([),]\)/\1'"'\2'"'\3/;t top'

또는 다음을 사용하십시오 -E.

sed -E -e ':top' -e "s/([(,])([^),']+)([),])/\1'\2'\3/;t top"

답변3

파일에 게시물에 설명된 WHERE 절만 있는 경우 다음을 수행해야 합니다.

$ sed -r "s/(\(|,)([^ ),]+)(\)|,)/\1'\2'\3/g" <Filename>
where c1 in ('a') and c2 in ('a',b,'c') and c3 in ()

파일이 SQL 문의 나머지 부분이나 여러 SQL 문과 같은 다른 데이터로 채워지면 파일의 다른 텍스트를 방해할 수 있습니다. 뒤돌아보기/예측 기능이 없으므로 sed더 안전한 대안을 고려할 수 있습니다 perl(WHERE 절이 각 SQL 문의 나머지 부분과 다른 행에 있는 경우).

$ perl -ne "s/(\(|,)([^ ),]+)(\)|,)/\1'\2'\3/g if /where/; print;" <Filename>
where c1 in ('a') and c2 in ('a',b,'c') and c3 in ()

관련 정보