我很难搞清楚如何在两种特殊字符模式之间的字符进行grep。具体来说,我需要grep第一个__ (双下划线)和第二个__之间的所有内容,我可以使用sed将它们转换为空格,然后剪切列,但这似乎有点不必要,也有点混乱。
我的数据看起来像这样..。
364__spc__spc__1334
608__aac(3)-Ik__aac(3)-Ik__1927
13__tet(S)__tet(S)_1__1102
我需要的结果是..。
spc
aac(3)-Ik
tet(S)
提前感谢任何有建议的人。
发布于 2014-03-27 14:53:27
你可以很容易地用awk
做这件事。
awk -F'__' '{print $2}' filename
$ 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)
发布于 2014-03-27 14:38:51
以下是Java的工作解决方案:
String s = "608__aac(3)-Ik__aac(3)-Ik__1927".replaceAll(".*?__(.*?)__.*", "$1");
PS:如果您想要将多个字符串与此regex匹配,请考虑创建一个Pattern
实例以提高性能(regex编译了一次,多次使用)。
另一个使用sed
:
echo "608__aac(3)-Ik__aac(3)-Ik__1927" | sed 's/.*\?__\(.*?\)__.*/\1/g'
发布于 2014-03-27 17:23:23
grep
对此有一个选择。从手册页:
-o,-只匹配-只打印匹配部分的线条.
$ cat file
364__spc__spc__1334
608__aac(3)-Ik__aac(3)-Ik__1927
13__tet(S)__tet(S)_1__1102
$ grep -o '__[^_]*__' file
__spc__
__aac(3)-Ik__
__tet(S)__
https://stackoverflow.com/questions/22700649
复制相似问题