我有一个名为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(/^"|"$/, "")
要"
在不使用反斜杠的情况下将 a 放入 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""')