regex - linux 只提取一个以特殊字符串开头并以第一次出现的逗号结尾的字符串
问题描述
我有一个日志文件包含一些信息,如下所示
"variable1=XXX, emotionType=sad, sentimentType=negative..."
我想要的是只grep匹配的字符串,字符串以emotionType开头,以第一次出现的逗号结尾。例如
emotionType=sad
emotionType=joy
...
我试过的是
grep -e "/^emotionType.*,/" file.log -o
但我一无所获。谁能告诉我我该怎么办?
解决方案
你需要使用
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
推荐阅读
- c# - 如何从文件中计算整数和的问题
- c - 函数中的结构数组重新分配 - 产生未定义的行为
- python - 如何从列中随机选择一个 Excel 单元格?
- sql - 在 WHERE 子句中的 JOIN 中写入条件时结果是否不同?
- c# - ASP.NET MVC 无法连接到我的本地 SQL Server 数据库
- java - 更改 DatagramChannel 加入多播组的限制?
- safari - 带有 Safari 浏览器的 TYPO3 7.6 中的 html RTE 编辑器问题
- c# - GZipStream MacOS Catalina
- sas - SAS %QUOTE 与 %BQUOTE
- postgresql - 无法从容器实例连接到 Azure Postgres db