如何批量将英文的双引号替换为中文的前后双引号

2018-02-05 20:28:17 +08:00
 GeekDuanLian

比如有类似如下的许多文件:

asdasd
"aa" asdasd "bb" asdasd
asdasd
"cc" asdasd "dd" asdasd
asdasd

我想在每行内,将匹配到的
奇数个英文双引号 " 替换为中文前双引号 “
偶数个英文双引号 " 替换为中文后双引号 ”

修改完后应该为:

asdasd
“ aa ” asdasd “ bb ” asdasd
asdasd
“ cc ” asdasd “ dd ” asdasd
asdasd

需使用 linux 下的原生命令,比如 sed 或者 awk

3973 次点击
所在节点    Linux
4 条回复
chenstack
2018-02-05 21:05:08 +08:00
给个简单的,例如文件名是 test.txt
sed 's/"\([^"]\{0,\}\)"/“$1 ”/g' -i test.txt
shoaly
2018-02-06 00:09:31 +08:00
奇偶数判断不如 判断 空格"=>空格+中文引号, 这样即便是引号漏掉没匹配也可以适配
bxb100
2018-02-06 15:08:36 +08:00
1L 正则正解
GeekDuanLian
2018-02-06 21:54:40 +08:00
@chenstack #1 有点小错误,改为
```
sed 's/"\([^"]\{0,\}\)"/“\1 ”/g' t.txt -i test.txt
```
成功了

非常感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428693

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX