首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何搜索和替换使用sed而不包括一组字符?

如何搜索和替换使用sed而不包括一组字符?
EN

Stack Overflow用户
提问于 2014-05-03 00:23:29
回答 4查看 328关注 0票数 3

你好,在下面的sed命令中,我需要在第二组括号代码中包含不接受以下一组单词的代码:

它将打破list.txt中的下列数据,将每个公司名称放在一行,公司名称以逗号之后,但有时为“公司”、“有限公司”、“有限责任公司”和“跟踪公司”。

这是相当先进的正则表达式,我似乎无法得到。

代码语言:javascript
运行
复制
sed -re 's/([a-zA-Z.]), (Need code here)/\1\n\2/g' list.txt

list.txt有以下数据:

代码语言:javascript
运行
复制
Electronic Arts, Inc., Electronic Arts Ltd.
Activision Publishing, Inc., ak tronic Software & Services GmbH
Coplin Software
Electronic Arts, Inc.
Electronic Arts, Inc.
In-Fusio
Activision Publishing, Inc.
Domark Ltd.
Electronic Arts, Inc.
Electronic Arts, Inc.
Aspyr Media, Inc., Electronic Arts, Inc.
Activision Deutschland GmbH, Activision Publishing, Inc., ak tronic Software & Services GmbH, Noviy Disk, Square Enix Co., Ltd.
Electronic Arts, Inc.
Electronic Arts, Inc., Electronic Arts Ltd.
Electronic Arts, Inc.
Electronic Arts, Inc.
Electronic Arts, Inc., Electronic Arts Square, K.K., MGM Interactive
Electronic Arts Ltd.

预期输出(注意逗号):

代码语言:javascript
运行
复制
GarageGames, Inc.
The Avalon Hill Game Company
Microforum International, The
Telenet Japan Co., Ltd.
Glu Mobile, Inc.
Warner Bros. Digital Distribution
Atari, Inc.
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-05-03 13:02:18

代码语言:javascript
运行
复制
perl -pe 's/([^,]), (?!Inc|LLC|The|Ltd)/\1\n/g' list.txt
票数 3
EN

Stack Overflow用户

发布于 2014-05-03 00:52:39

根据您的示例list.txt,您可以尝试如下:

代码语言:javascript
运行
复制
  sed -re 's/(, )?(Inc.|The|Ltd.?|LLC)//g' list.txt| tr ',' '\n' | sed -re 's/(.*)/\1/g' | sed -re '/^\s*$/d' | sed -re 's/(^ | $)//g'

输出:

代码语言:javascript
运行
复制
Electronic Arts
Electronic Arts
Activision Publishing
ak tronic Software & Services GmbH
Coplin Software
Electronic Arts
Electronic Arts
In-Fusio
Activision Publishing
Domark
Electronic Arts
Electronic Arts
Aspyr Media
Electronic Arts
Activision Deutschland GmbH
Activision Publishing
ak tronic Software & Services GmbH
Noviy Disk
Square Enix Co.
Electronic Arts
Electronic Arts
Electronic Arts
Electronic Arts
Electronic Arts
Electronic Arts
Electronic Arts Square
K.K.
MGM Interactive

注:

您可以将上面的列表输送到awk,并且只显示唯一的结果,例如:

代码语言:javascript
运行
复制
sed -re 's/(, )?(Inc.|The|Ltd.?|LLC)//g' list.txt| tr ',' '\n' | sed -re 's/(.*)/\1/g' | sed -re '/^\s*$/d' | sed -re 's/(^ | $)//g'| awk '!seen[$0]++'

产出:

代码语言:javascript
运行
复制
Electronic Arts
Activision Publishing
ak tronic Software & Services GmbH
Coplin Software
In-Fusio
Domark
Aspyr Media
Activision Deutschland GmbH
Noviy Disk
Square Enix Co.
Electronic Arts Square
K.K.
MGM Interactive
票数 3
EN

Stack Overflow用户

发布于 2014-05-03 08:12:06

代码语言:javascript
运行
复制
sed -nr '/^ *([^,]+(, *(Inc\.?|The|Ltd\.?|LLC))?)(,(.*))?/ {
                   s//\1\n\5/
                   P
                   D
}'             
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23438835

复制
相关文章

相似问题

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