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""')