이스케이프 문자와 gsub를 사용하지 않고 텍스트 앞에 따옴표를 가져와야 합니다.

이스케이프 문자와 gsub를 사용하지 않고 텍스트 앞에 따옴표를 가져와야 합니다.

tst.csv다음 내용으로 이름이 지정된 파일이 있습니다

"FORESS INTL PTN "A" (208)"

다음 출력을 얻으려면 이스케이프 문자( \) 를 사용해서는 안 되며 gsub/는 sub다음 예상 출력을 달성하는 데만 필요합니다. 사용 중인 외부 프로그램은 백슬래시 문자를 디코딩하지 않기 때문입니다.

예상 출력

"FORESS INTL PTN ""A"" (208)"

다음 명령을 시도했습니다

awk '{gsub(/"/,"&&");gsub(/^""|""$/,"")}1' tst.csv

나는 다음과 같은 o/p를 얻습니다

FORESS INTL PTN ""A"" (208)

그러나 텍스트 앞이나 줄 끝에 큰따옴표를 사용할 수 없습니다.

답변1

간단히:

gsub(/"/, "&&"); gsub(/^"|"$/, "")

"백슬래시를 사용하지 않고 awk 변수에 넣으 려면 언제든지 다음을 수행할 수 있습니다.

awk -v q='"' ...

또는 awk(ASCII 기반 시스템을 가정):

BEGIN {q = sprintf("%c", 34)}

답변2

다음 명령을 사용하여 ""시작과 끝의 복식을 바꿉니다."

gsub(/^""|""$/, "\"")

"(이스케이프 문자를 사용하지만) 시작과 끝에서 가장 바깥쪽 문자를 제거하세요.

gsub(/^"|"$/, "")

답변3

아래 sed 명령을 사용해 보십시오. 훌륭하게 작동합니다.

  echo '"FORESS INTL PTN "A" (208)"'| sed "s/\"A\"/\"&\"/g"

산출

    "FORESS INTL PTN ""A"" (208)"

파이썬

raveen:/var/tmp$ cat o.py 
#!/usr/bin/python
k=open('p.txt','r')
for i in k:
    print i.replace('"A"','""A""')

관련 정보