regex - grep - 正则表达式 - 匹配到一个特定的词

标签 regex bash grep

假设我有一个包含这样几行的文件

abcefghijklxyz
abcefghijkl

我只想获取 abc 和行尾之间的字符串。行尾可以定义为正常的行尾或字符串xyz

我的问题是

如何使用 grep 和正则表达式只获取匹配的字符串?例如,上面显示的两行的预期输出将是

efghijkl
efghijkl

我不需要开始和结束标记。

到目前为止我尝试了什么

grep -oh "abc.*xyz"

我使用 Ubuntu 13.04 和 Bash shell。

最佳答案

此行将前导 abcending 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/

相关文章:

ruby - 使用 mechanize 时使用正则表达式查找具有特定 anchor 的链接

c# - 正则表达式检查字符串的第二个字母

php - 如何使用 .htaccess 重定向除一个请求以外的所有请求?

json - jq : update json content when path is variable

linux - Bash 变量管道在别名中不起作用?

unix - grep -w 只有空格作为分隔符

bash - 'grep +A' : print everything after a match

c++ - 计算匹配数

linux - shell 源代码和可执行文件位于哪个目录中?

regex - 使用 GREP/Regex 将 url 中的下划线替换为给定的 url 扩展