首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Grep两种特殊字符模式之间的所有内容

Grep两种特殊字符模式之间的所有内容
EN

Stack Overflow用户
提问于 2014-03-27 14:32:59
回答 3查看 1.2K关注 0票数 2

我很难搞清楚如何在两种特殊字符模式之间的字符进行grep。具体来说,我需要grep第一个__ (双下划线)和第二个__之间的所有内容,我可以使用sed将它们转换为空格,然后剪切列,但这似乎有点不必要,也有点混乱。

我的数据看起来像这样..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
364__spc__spc__1334
608__aac(3)-Ik__aac(3)-Ik__1927
13__tet(S)__tet(S)_1__1102

我需要的结果是..。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spc
aac(3)-Ik
tet(S)

提前感谢任何有建议的人。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-27 14:53:27

你可以很容易地用awk做这件事。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk -F'__' '{print $2}' filename

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat filename
364__spc__spc__1334
608__aac(3)-Ik__aac(3)-Ik__1927
13__tet(S)__tet(S)_1__1102

$ awk -F'__' '{print $2}' filename
spc
aac(3)-Ik
tet(S)
票数 1
EN

Stack Overflow用户

发布于 2014-03-27 14:38:51

以下是Java的工作解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
String s = "608__aac(3)-Ik__aac(3)-Ik__1927".replaceAll(".*?__(.*?)__.*", "$1");

PS:如果您想要将多个字符串与此regex匹配,请考虑创建一个Pattern实例以提高性能(regex编译了一次,多次使用)。

另一个使用sed

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "608__aac(3)-Ik__aac(3)-Ik__1927" | sed 's/.*\?__\(.*?\)__.*/\1/g'
票数 0
EN

Stack Overflow用户

发布于 2014-03-27 17:23:23

grep对此有一个选择。从手册页:

-o,-只匹配-只打印匹配部分的线条.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cat file
364__spc__spc__1334
608__aac(3)-Ik__aac(3)-Ik__1927
13__tet(S)__tet(S)_1__1102
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ grep -o '__[^_]*__' file
__spc__
__aac(3)-Ik__
__tet(S)__
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22700649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文