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