如果我有一个如下所示的字符串
"firstname surname"""
如何删除所有内部双引号但保留周围的引号。
我想保留周围环境的原因是因为此字符串包含逗号,并且不希望将其视为CSV中的新列
我尝试过使用
echo '"firstname surname"""' | sed -e "s/\"\"\+/ /g"
但总是删除结束双引号。
答案 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