繁体   English   中英

在sed反向引用替换中转义双引号

[英]Escaping double quotes within a sed backreference replace

我有以下文字:

Matt has 11 eggs and they are brown
Helen has 23 ducks and they are black and brown
Todd has 34 quarters and they are silver
Bud has 45 pens and they are red, yellow, "greenish" and blue

当我运行以下sed命令时:

sed -E "s/([^ ]+) has ([^ ]+) ([^ ]+) and they are (.*)/\"\1\",\"\2\",\"\3\",\"\4\"/" input

我收到此CSV:

"Matt","11","eggs","brown"
"Helen","23","ducks","black and brown"
"Todd","34","quarters","silver"
"Bud","45","pens","red, yellow, "greenish" and blue"

但是我真正想要的是这个(引号正确转义):

"Matt","11","eggs","brown"
"Helen","23","ducks","black and brown"
"Todd","34","quarters","silver"
"Bud","45","pens","red, yellow, \"greenish\" and blue"

我该怎么做?

尝试:

sed -E 's/"/\\"/g; 
  s/([^ ]+) has ([^ ]+) ([^ ]+) and they are (.*)/"\1","\2","\3","\4"/' input

这首先将所有"实例替换为\\" ,然后执行原始命令。 请注意,在sed程序周围使用引号会使它更具可读性。

这可能对您有用(GNU sed):

sed -r 's/"/\\&/g;s/^\\"|\\(",)\\"|\\"$/\1"/g'  file

转换所有"的,以\\"的,然后删除\\从那些在起点,终点和插图中的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM