删除除外部之外的字符串中的所有双引号

时间:2013-10-31 10:16:01

标签: regex csv sed

如果我有一个如下所示的字符串

"firstname surname"""

如何删除所有内部双引号但保留周围的引号。

我想保留周围环境的原因是因为此字符串包含逗号,并且不希望将其视为CSV中的新列

我尝试过使用

echo '"firstname surname"""' | sed -e "s/\"\"\+/ /g"

但总是删除结束双引号。

6 个答案:

答案 0 :(得分:3)

这是perl命令行比sed更合适的一种情况,因为sed不支持lookarounds:

s='"firstname surname"foo"bar"'
echo "$s"| perl -pe 's/(?!^)"(?!$)//g'

"firstname surnamefoobar"

答案 1 :(得分:0)

你可以这样做:

$ echo '"firstname surname"""' | sed -e 's/["]["]//g' 
"firstname surname"

答案 2 :(得分:0)

使用awk

echo '"firstname surname"""' | awk '{gsub(/""/,x)}1'
"firstname surname"

答案 3 :(得分:0)

也许这对此太过分了,但我这样做了:

$ echo '"firstname surname"""' | sed -e 's/^"/@/' -e 's/"$/@/' -e 's/"//g' -e 's/@/"/g'
"firstname surname"

删除前导和结束"之间的所有"

$ echo '"firstn"ame "surname"""' | sed -e 's/^"/@/' -e 's/"$/@/' -e 's/"//g' -e 's/@/"/g'
"firstname surname"

解释

sed     -e 's/^"/@/'    -e 's/"$/@/'           -e 's/"//g'    -e 's/@/"/g'
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^           ^^^^^^^^^^^       ^^^^^^^^^
       replace leading and closing " with @    delete all "    set @ back to "

答案 4 :(得分:0)

sed 's/["]\{2,\}/"/g'

删除超过1“(["]\{2,\})的所有出现只有一个”。它也可以用在sourrounding quote不是要处理的完整字符串的第一个和最后一个char的情况下。

如果仅仅是外部报价

sed 's/^[^"].*[^"]$/&/;t;s/^"\(.*\)"$/\1/;s/"//g;s/.*/"&"/'

这也确保我们不会修改“对于未被引号

包围的字符串

如果您将引用的字符串放入另一个上下文中,请给我们一个示例(特别是分隔符信息)

答案 5 :(得分:0)

这可能适合你(GNU sed):

sed -r ':a;s/^("[^"]*)"(.*")$/\1\2/;ta' file

或:

sed 's/"//g;s/.*/"&"/' file
相关问题