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)"
Python
raveen:/var/tmp$ cat o.py
#!/usr/bin/python
k=open('p.txt','r')
for i in k:
print i.replace('"A"','""A""')