首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sed/awk删除具有多模式计数的单词

如何使用sed/awk删除具有多模式计数的单词
EN

Stack Overflow用户
提问于 2012-06-16 21:01:37
回答 4查看 1.4K关注 0票数 1

我有一个字符串记录文件,其中一个字段--由",“分隔--可以在其中包含一个或多个"-”。

目标是如果字段值包含两个以上的"-“,则删除它。

我正在努力恢复我过去对sed/awk的了解,但没有取得多大进展。

==========

代码语言:javascript
复制
info,whitepaper,Data-Centers,yes-the-6-top-problems-in-your-data-center-lane

info,whitepaper,Data-Centers,the-evolution-center

info,whitepaper,Data-Centers,the-evolution-of-lan-technology-lanner

==========

预期结果:

代码语言:javascript
复制
info,whitepaper,Data-Centers

info,whitepaper,Data-Centers,the-evolution-center

info,whitepaper,Data-Centers

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-06-16 21:12:29

试一试

代码语言:javascript
复制
sed -r 's/(^|,)([^,-]+-){3,}[^,]+(,|$)/\3/g'

或者如果你喜欢斜杠

代码语言:javascript
复制
sed 's/\(^\|,\)\([^,-]\+-\)\{3,\}[^,]\+\(,\|$\)/\3/g'

解释:

我使用的是最基本的sed命令:替换。语法是:s/pattern/replacement/flags

这里pattern(^|,)([^,-]+-){3,}[^,]+(,|$)replacement\3flagsg

g标志意味着全局替换(所有匹配的部件都被替换,而不仅仅是行中的第一个)。

pattern

  • 括号()创建一个组。有点像数学。它们还允许指后面有一个数字的组。
  • ^$表示字符串的开始和结束。
  • |的意思是“或”,所以(^|,)的意思是“逗号或字符串的开头”。
  • 方括号[]表示一个字符类,^在里面表示否定。所以[^,-]的意思是“除了逗号或连字符以外的任何东西”。通常情况下,连字符在字符类中有一个特殊的含义:[a-z]表示所有小写字母。但这里只是一个连字符,因为它不在中间。
  • 表达式后面的+表示“匹配它1次或更多次”(就像*的意思是匹配它0次或更多次)。
  • {N}的意思是“完全匹配N时间。{N,M}是”从NM times“。{3,}的意思是”三次或更多次“。+等同于{1,}

所以就是这样了。replacement只是\3。这指的是()中的第三个组,在本例中是(,|$)。这将是换人后剩下的唯一的东西。

P.S. -r选项只是改变了需要转义的字符:没有它,所有的()-{}|都被当作常规字符处理,除非您用\转义它们。相反,要将文本(-r选项匹配,则需要将其转义。

这是参考文献sed的。man sed也是你的朋友。如果你还有其他问题,请告诉我。

票数 1
EN

Stack Overflow用户

发布于 2012-06-16 21:21:17

您可以尝试perl,而不是sed或awk:

代码语言:javascript
复制
perl -F, -lane 'print join ",", grep { !/-.*-.*-/ } @F' < file.txt
票数 0
EN

Stack Overflow用户

发布于 2012-06-16 21:23:55

代码语言:javascript
复制
sed 's/\(^\|,\)\([^,]*-\)\{3\}[^,]*\(,\|$\)//g'

在更多的情况下,这应该是可行的:

代码语言:javascript
复制
sed 's/,$/\n/g;s/\(^\|,\|\n\)\([^,\n]*-\)\{3\}[^,\n]*\(,\|\n\|$\)/\3/g;s/,$//;s/\n/,/g'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11067008

复制
相关文章

相似问题

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