grep只有整个单词部分匹配模式

时间:2018-02-03 14:48:16

标签: regex grep

我的日志文件包含以“skylabs / plat-”开头的文本。我想在文本上面提取整个单词匹配

示例文字

This is a log line 1 skylabs/plat-abcd_1234 end of line
Some other text skylabs/plat-efgj_1234 this is okay
Firth phase of skylabs/plat-lmno-1234-sst all set
Nothing special skylabs/plat-usiu-sku-1234 , good to go

我试过

egrep -Eo "^(skylabs/plat-)" Text.log

但我没有得到任何东西。我想获得类似于下面的输出

skylabs/plat-abcd_1234 
skylabs/plat-lmno-1234-sst

1 个答案:

答案 0 :(得分:0)

尝试

$ grep -io 'skylabs/plat[a-z0-9_-]*' Text.log 
skylabs/plat-abcd_1234
skylabs/plat-efgj_1234
skylabs/plat-lmno-1234-sst
skylabs/plat-usiu-sku-1234
  • [a-z0-9_-]*表示零或多个字母,数字,下划线和连字符(i选项用于忽略大小写,即匹配大写/小写字母)

对于给定的输入,您还可以使用grep -o 'skylabs/plat[^ ]*',其中[^ ]*将匹配零个或多个非空格字符。这一切都取决于你需要匹配的字符种类


关于egrep -Eo "^(skylabs/plat-)"

的说明
    据我所知,
  • egrepgrep -E完全相同
  • ^是一个元字符,会强制匹配发生在行首。不应该在这里使用
  • ()此处不需要分组
  • 正则表达式在-
  • 之后不完整