假设我有一个包含这样几行的文件
abcefghijklxyz
abcefghijkl
我只想获取 abc
和行尾之间的字符串。行尾可以定义为正常的行尾或字符串xyz
。
我的问题是
如何使用 grep
和正则表达式只获取匹配的字符串?例如,上面显示的两行的预期输出将是
efghijkl
efghijkl
我不需要开始和结束标记。
到目前为止我尝试了什么
grep -oh "abc.*xyz"
我使用 Ubuntu 13.04 和 Bash shell。
最佳答案
此行将前导 abc
和 ending 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
关于regex - grep - 正则表达式 - 匹配到一个特定的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373334/