可以说我有一个像这样的行的文件
abcefghijklxyz abcefghijkl
我想只获得abc
行之间和行尾的字符串.行的结尾可以定义为正常的行尾或字符串xyz
.
我的问题是
如何只使用匹配的字符串grep
和正则表达式?例如,上面显示的两条线的预期输出将是
efghijkl efghijkl
我不想要开始和结束标记.
我到现在为止做了什么
grep -oh "abc.*xyz"
我使用Ubuntu 13.04和Bash shell.
这条线斩断前进abc
和结束 xyz
(如果有),并为您提供所需的部分:
grep -oP '^abc\K.*?(?=xyz$|$)'
用你的例子:
kent$ echo "abcefghijklxyz abcefghijkl"|grep -oP '^abc\K.*?(?=xyz$|$)' efghijkl efghijkl
xyz
在文本中间的另一个例子:
kent$ echo "abcefghijklxyz abcefghijkl abcfffffxyzbbbxyz abcffffxyzbbb"|grep -oP '^abc\K.*?(?=xyz$|$)' efghijkl efghijkl fffffxyzbbb ffffxyzbbb