首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用sed\awk和群替换Regex

用sed\awk和群替换Regex
EN

Stack Overflow用户
提问于 2015-04-15 23:13:30
回答 3查看 60关注 0票数 1

我有这个输入文本

代码语言:javascript
运行
复制
16789248,16789759,"AS24155 Asia Pacific Broadband Wireless Communications Inc"

我要这条短信

代码语言:javascript
运行
复制
"AS24155","Asia Pacific Broadband Wireless Communications Inc"

这个regex匹配

代码语言:javascript
运行
复制
 /(.*)(AS\d+)(\s)([^"]+).*/g

用这个替代,"$2","$4"

我必须处理300 k行,如果我能够使用基于linux的命令行实用工具(如sed或awk...but ),我就不会得到匹配或匹配,即使正则表达式似乎在其他地方匹配。

我应该用不同的东西吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-15 23:17:51

sed -r可以通过一些修改来处理它:[0-9]代替\d<space>代替\s。没有真正的理由去捕捉第一和第三部分,所以我删除了这些组。

代码语言:javascript
运行
复制
sed -r -e 's/.*(AS[0-9]+) ([^"]+).*/"\1","\2"/'

或者,如果要完全匹配这些字符类,请使用[[:digit:]]表示\d,使用[[:space:]]表示\s

代码语言:javascript
运行
复制
sed -r -e 's/.*(AS[[:digit:]]+)[[:space:]]([^"]+).*/"\1","\2"/'

或者,您可以使用比csvtool更适合解析CSV文件的csvtool

代码语言:javascript
运行
复制
csvtool col 3 input.txt | while read number name; do
    printf '"%s","%s"\n' "$number" "$name"
done
票数 1
EN

Stack Overflow用户

发布于 2015-04-16 08:11:15

代码语言:javascript
运行
复制
sed 's/[^"]*"/"/;s[[:space:]]/","/'

基于你的样本,避免分组问题

票数 0
EN

Stack Overflow用户

发布于 2015-04-16 12:55:30

sed是最好的选择,但是FYI在GNU awk中可以使用几乎精确的RE来完成这项工作:

代码语言:javascript
运行
复制
$ awk 'match($0,/.*(AS[0-9]+)\s([^"]+).*/,a){printf "\"%s\",\"%s\"\n", a[1], a[2]}' file
"AS24155","Asia Pacific Broadband Wireless Communications Inc"

您的原始命令可能失败了,因为只有一些工具接受\s而不是[[:space:]],而几乎没有一个工具接受\d而不是[[:digit:]] (或[0-9])。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29662575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档