sed를 사용하여 SQL 쿼리로 사용하기 위해 텍스트 파일에 작은 따옴표를 삽입해야합니다.

마이클 콘래드 홀

다음과 같은 텍스트 줄을 만들었습니다.

INSERT INTO radcheck(id, username, attribute, op, value) VALUES (,,00:23:32:c2:a9:e8,Auth-Type,:=,Accept);

sed를 사용하여 다음과 같이 만들고 싶습니다.

INSERT INTO radcheck(id, username, attribute, op, value) VALUES (,'','00:23:32:c2:a9:e8','Auth-Type',':=','Accept');

이것은 맥락에서 더 의미가 있으며 지난 (분명히) 17 시간 동안 조금 더 나아졌습니다.

#!/bin/bash
ssh [email protected] brmacs >>MACS.txt mv MACS.txt /etc/persistent scp [email protected]:/etc/persistent/MACS.txt MACS.txt
sed -i "1d" MACS.txt
head -c 58 MACS.txt >>shortmacs.txt
tail -c 18 shortmacs.txt >>usermac.txt
sed 's/"//g' usermac.txt >>usermacrdy.txt
sed -i 's/^/INSERT INTO `radcheck`(`id`, `username`, `attribute`, `op`, `value`) VALUES (,'',/' usermacrdy.txt
sed "s/$/','Auth-Type',':=','Accept');/" usermacrdy.txt > sqlquery.txt
sed -i "s/,,/\,\'\',\'/" sqlquery.txt
rm -f MACS.txt
rm -f shortmacs.txt
rm -f usermac.txt
rm -f usermacrdy.txt

공장!!!

머리와 꼬리는 UBNT CPE 장치에서 xfer'd 원본 텍스트 파일에서 MAC 주소를 잘라낸 다음 sed를 통해 전달하여 MAC 주소 주위에 SQL 구문을 작성합니다.

결국 id쿼리 일부가 성공에 필요하지 않다는 것을 알았으므로 이제는 다음과 같이 약간 동일한 보트에 있습니다.

sed -i 's/^/INSERT INTO `radcheck`(`username`, `attribute`, `op`, `value`) VALUES (/' usermacrdy.txt
sed "s/$/','Auth-Type',':=','Accept');/" usermacrdy.txt > sqlquery.txt
sed -i "s/\,\'\',\'//" sqlquery.txt
John1024

필요한 작은 따옴표를 포함하는 네 가지 방법이 있습니다.

작은 따옴표 문자열 내에서 작은 따옴표 문자열을 이스케이프 할 수 없습니다. 그러나 인용 된 문자열을 끝내고 이스케이프 된 작은 따옴표를 삽입 한 다음 새 작은 따옴표로 된 문자열을 시작할 수 있습니다. 따라서 중간에 작은 따옴표를 넣으 'ab'려면 다음을 사용하십시오 'a'\''b'. 또는 필요한 sed 명령을 사용합니다.

$ sed -r 's/,([^ ),]+)/,'\''\1'\''/g; s/,,/,'\'\'',/g' file
INSERT INTO radcheck(id, username, attribute, op, value) VALUES (,'','00:23:32:c2:a9:e8','Auth-Type',':=','Accept');

두 번째 방법은 큰 따옴표로 묶인 문자열을 사용하는 것입니다.이 경우 작은 따옴표를 쉽게 삽입 할 수 있습니다.

$ sed -r "s/,([^ ),]+)/,'\1'/g; s/,,/,'',/g" file
INSERT INTO radcheck(id, username, attribute, op, value) VALUES (,'','00:23:32:c2:a9:e8','Auth-Type',':=','Accept');

큰 따옴표로 묶인 문자열의이 문제는 쉘이 문자열을 처리한다는 것입니다. 그러나 여기에는 쉘 활성 문자가 없으므로 쉽습니다.

세 번째 방법은 PM2Ring이 보여주는 것처럼 16 진수 이스케이프를 사용하는 것입니다.

Jonathan Leffler의 의견에서 제안한 네 번째 방법은 sed명령을 별도의 파일에 배치하는 것입니다 .

$ cat script.sed 
s/,([^ ),]+)/,'\1'/g
s/,,/,'',/g
$ sed -rf script.sed file
INSERT INTO radcheck(id, username, attribute, op, value) VALUES (,'','00:23:32:c2:a9:e8','Auth-Type',':=','Accept');

이 방법은 sed쉘의 간섭없이 직접 명령 읽는 강력한 장점이 있습니다. 결과적으로 이것은 쉘 활성 문자를 이스케이프 할 필요를 완전히 피하고 명령을 순수한 sed구문 으로 입력 할 수 있도록 합니다.

어떻게 sed솔루션 작동

트릭은 원하는 쉼표로 구분 된 문자열을 작은 따옴표로 묶지 만 다른 문자열은 묶지 않는 것입니다. 귀하가 제공 한 단일 예를 기반으로 한 방법은 다음과 같습니다.

  • s/,([^ ),]+)/,'\1'/g

    이것은 쉼표 뒤에 오는 하나 이상의 공백, 쉼표 및 괄호를 닫지 않는 문자를 찾습니다. 이러한 문자는 작은 따옴표 안에 배치됩니다.

  • s/,,/,'',/g

    연속 된 쉼표를 찾고 그 사이에 두 개의 작은 따옴표를 넣습니다.

OSX 및 기타 BSD 플랫폼

추가 백 슬래시를 피하기 위해 위의 sed표현식은 확장 정규 표현식을 사용합니다. GNU를 사용하면 다음과 같이 호출 -r되지만 BSD에서는 -E. 또한 일부 비 GNU sed는 세미콜론으로 구분 된 여러 명령을 허용하지 않습니다. 따라서 OSX에서 다음을 시도하십시오.

sed -E -e "s/,([^ ),]+)/,'\1'/g" -e "s/,,/,'',/g" file

부록 : MAC 주소 일치

주석에서 다음과 같은 입력이 있습니다.

$ cat file3
 INSERT INTO radcheck(username, attribute, op, value) VALUES (00:23:32:c2:a9:e8,'Auth-Type',':=','Accept'); 

그리고 열린 괄호 뒤에 오는 MAC 주소를 작은 따옴표로 묶어야합니다. 하기 위해서:

$ sed -r "s/\(([[:xdigit:]:]+)/('\1'/" file3
 INSERT INTO radcheck(username, attribute, op, value) VALUES ('00:23:32:c2:a9:e8','Auth-Type',':=','Accept'); 

모든 로케일에서 [:xdigit:]모든 16 진수와 일치합니다. 따라서 ([[:xdigit:]:]+)MAC 주소 (16 진수 또는 콜론)와 일치합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

큰 따옴표를 사용하여 Windows 배치 파일에서 프로세스를 시작하기 위해`start`를 사용할 때의 부작용

분류에서Dev

sed를 사용하여 따옴표와 작은 따옴표가 포함 된 텍스트를 바꿉니다.

분류에서Dev

Swift : 표 셀에 텍스트를 삽입하고 사용자가 텍스트를 입력하면보기가 다음보기로 이동해야합니다.

분류에서Dev

LIKE 쿼리를 사용하여 텍스트에 작은 따옴표가있는 Ormlite 예외

분류에서Dev

bash 루프를 사용하여 명령 줄에서 작은 따옴표를 사용하는 프로그램을 실행합니다. 여기서 작은 따옴표는 bash 스크립트의 의도를 무효화합니다.

분류에서Dev

CSS를 사용하여 태그 뒤에 따옴표로 묶인 텍스트를 제거하려면 어떻게해야합니까?

분류에서Dev

perl / awk / sed를 사용하여 파일 내에서 따옴표로 묶인 모든 텍스트를 검색 한 다음 삭제할 수 있습니까?

분류에서Dev

nchar 필드 값의 합계를 계산하기 위해 linq를 사용하여 SQL에 합계 쿼리를 작성하려면 어떻게해야합니까?

분류에서Dev

sed를 사용하여 perl에서 해시 목록 서식 지정-작은 따옴표 추가

분류에서Dev

Android의 sqlite db에 작은 따옴표로 텍스트를 삽입하는 방법은 무엇입니까?

분류에서Dev

Matlab은 텍스트 읽기를 위해 변수에 파일 경로를 사용합니다.

분류에서Dev

SQL에서 여러 열 값을 업데이트하기 위해 하위 쿼리를 사용하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트를 사용하여 테이블에 이미지를 무작위로 삽입하려면 어떻게해야합니까?

분류에서Dev

Ubuntu 명령 줄에서 작은 따옴표 또는 큰 따옴표를 언제 사용해야합니까?

분류에서Dev

SQL-하위 쿼리를 사용하여 문에 삽입 한 다음 문을 업데이트합니다.

분류에서Dev

sed를 사용하여 파일 맨 위에 줄을 삽입하려면 어떻게해야합니까?

분류에서Dev

'이름 바꾸기'를 사용하여 모든 파일에서 모든 작은 따옴표를 재귀 적으로 제거하려면 어떻게해야합니까?

분류에서Dev

sed를 사용하여 텍스트 파일에서 일부 문자를` '`문자로 대체하려면 어떻게해야합니까?

분류에서Dev

여러 줄 일치 후에 sed를 사용하여 텍스트를 삽입하려면 어떻게해야합니까?

분류에서Dev

큰`gzip` 파일에서 탭으로 구분 된 텍스트를 가져 오기 위해`.split ()`을 사용하는 방법은 무엇입니까? 덩어리?

분류에서Dev

양식 컨트롤 / 드롭 다운에 텍스트를 삽입하기 위해 Python을 사용하여이 오류를 어떻게 해결합니까?

분류에서Dev

배치 파일을 사용하여 여러 텍스트 파일의 시작 부분에 텍스트를 추가하려면 어떻게해야합니까?

분류에서Dev

Flutter에서 위젯을 사용하여 파일에서 텍스트를 읽고 목록으로 표시하려면 어떻게해야합니까?

분류에서Dev

작은 따옴표가 htmlspecialchars를 사용하여 인코딩되었지만 JavaScript는 여전히 이러한 따옴표를 함수 호출에서 이스케이프해야한다고 불평하고 있습니다.

분류에서Dev

여러 조건으로 쿼리를 업데이트하기 위해 동적 SQL을 사용하는 방법은 무엇입니까?

분류에서Dev

matplotlib를 사용하여 플로팅하기 위해 텍스트 파일 inorder의 문자열을 변환

분류에서Dev

삽입 쿼리에서 작은 따옴표를 허용하는 Codeigniter

분류에서Dev

큰 따옴표를 작은 따옴표로 대체하기 위해 AngularJS 필터 만들기

분류에서Dev

ElasticSearch 대량 업로드에서 작은 따옴표로 데이터를 삽입하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    큰 따옴표를 사용하여 Windows 배치 파일에서 프로세스를 시작하기 위해`start`를 사용할 때의 부작용

  2. 2

    sed를 사용하여 따옴표와 작은 따옴표가 포함 된 텍스트를 바꿉니다.

  3. 3

    Swift : 표 셀에 텍스트를 삽입하고 사용자가 텍스트를 입력하면보기가 다음보기로 이동해야합니다.

  4. 4

    LIKE 쿼리를 사용하여 텍스트에 작은 따옴표가있는 Ormlite 예외

  5. 5

    bash 루프를 사용하여 명령 줄에서 작은 따옴표를 사용하는 프로그램을 실행합니다. 여기서 작은 따옴표는 bash 스크립트의 의도를 무효화합니다.

  6. 6

    CSS를 사용하여 태그 뒤에 따옴표로 묶인 텍스트를 제거하려면 어떻게해야합니까?

  7. 7

    perl / awk / sed를 사용하여 파일 내에서 따옴표로 묶인 모든 텍스트를 검색 한 다음 삭제할 수 있습니까?

  8. 8

    nchar 필드 값의 합계를 계산하기 위해 linq를 사용하여 SQL에 합계 쿼리를 작성하려면 어떻게해야합니까?

  9. 9

    sed를 사용하여 perl에서 해시 목록 서식 지정-작은 따옴표 추가

  10. 10

    Android의 sqlite db에 작은 따옴표로 텍스트를 삽입하는 방법은 무엇입니까?

  11. 11

    Matlab은 텍스트 읽기를 위해 변수에 파일 경로를 사용합니다.

  12. 12

    SQL에서 여러 열 값을 업데이트하기 위해 하위 쿼리를 사용하는 방법은 무엇입니까?

  13. 13

    자바 스크립트를 사용하여 테이블에 이미지를 무작위로 삽입하려면 어떻게해야합니까?

  14. 14

    Ubuntu 명령 줄에서 작은 따옴표 또는 큰 따옴표를 언제 사용해야합니까?

  15. 15

    SQL-하위 쿼리를 사용하여 문에 삽입 한 다음 문을 업데이트합니다.

  16. 16

    sed를 사용하여 파일 맨 위에 줄을 삽입하려면 어떻게해야합니까?

  17. 17

    '이름 바꾸기'를 사용하여 모든 파일에서 모든 작은 따옴표를 재귀 적으로 제거하려면 어떻게해야합니까?

  18. 18

    sed를 사용하여 텍스트 파일에서 일부 문자를` '`문자로 대체하려면 어떻게해야합니까?

  19. 19

    여러 줄 일치 후에 sed를 사용하여 텍스트를 삽입하려면 어떻게해야합니까?

  20. 20

    큰`gzip` 파일에서 탭으로 구분 된 텍스트를 가져 오기 위해`.split ()`을 사용하는 방법은 무엇입니까? 덩어리?

  21. 21

    양식 컨트롤 / 드롭 다운에 텍스트를 삽입하기 위해 Python을 사용하여이 오류를 어떻게 해결합니까?

  22. 22

    배치 파일을 사용하여 여러 텍스트 파일의 시작 부분에 텍스트를 추가하려면 어떻게해야합니까?

  23. 23

    Flutter에서 위젯을 사용하여 파일에서 텍스트를 읽고 목록으로 표시하려면 어떻게해야합니까?

  24. 24

    작은 따옴표가 htmlspecialchars를 사용하여 인코딩되었지만 JavaScript는 여전히 이러한 따옴표를 함수 호출에서 이스케이프해야한다고 불평하고 있습니다.

  25. 25

    여러 조건으로 쿼리를 업데이트하기 위해 동적 SQL을 사용하는 방법은 무엇입니까?

  26. 26

    matplotlib를 사용하여 플로팅하기 위해 텍스트 파일 inorder의 문자열을 변환

  27. 27

    삽입 쿼리에서 작은 따옴표를 허용하는 Codeigniter

  28. 28

    큰 따옴표를 작은 따옴표로 대체하기 위해 AngularJS 필터 만들기

  29. 29

    ElasticSearch 대량 업로드에서 작은 따옴표로 데이터를 삽입하려면 어떻게해야합니까?

뜨겁다태그

보관