![需要在文本前面获取引号而不使用任何转义字符和 gsub](https://linux22.com/image/174218/%E9%9C%80%E8%A6%81%E5%9C%A8%E6%96%87%E6%9C%AC%E5%89%8D%E9%9D%A2%E8%8E%B7%E5%8F%96%E5%BC%95%E5%8F%B7%E8%80%8C%E4%B8%8D%E4%BD%BF%E7%94%A8%E4%BB%BB%E4%BD%95%E8%BD%AC%E4%B9%89%E5%AD%97%E7%AC%A6%E5%92%8C%20gsub.png)
我有一个名为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""')