首页 > 解决方案 > linux 只提取一个以特殊字符串开头并以第一次出现的逗号结尾的字符串

问题描述

我有一个日志文件包含一些信息,如下所示

"variable1=XXX, emotionType=sad, sentimentType=negative..."

我想要的是只grep匹配的字符串,字符串以emotionType开头,以第一次出现的逗号结尾。例如

emotionType=sad
emotionType=joy
...

我试过的是

grep -e "/^emotionType.*,/" file.log -o

但我一无所获。谁能告诉我我该怎么办?

标签: regexgrep

解决方案


你需要使用

grep -o "emotionType[^,]*" file.log

笔记:

  • 如果您的匹配项不在每行的开头,则删除^或替换为, 起始单词边界构造\<
  • 删除/正则表达式两端的字符,因为grep不使用正则表达式分隔符(如sed
  • [^,]是一个否定括号表达式,它匹配除逗号之外的任何字符
  • *是匹配零次或多次出现的 POSIX BRE 量词。

查看在线演示

#!/bin/bash
s="variable1=XXX, emotionType=sad, sentimentType=negative, emotionType=happy"
grep -o "emotionType=[^,]*" <<< "$s"

输出:

emotionType=sad
emotionType=happy

推荐阅读