grep -Eo -m 1 包括第一次匹配后的额外字符; (将括号中的字符视为单个模式)

grep -Eo -m 1 包括第一次匹配后的额外字符; (将括号中的字符视为单个模式)

我找到了这个答案:grep 的组匹配包含额外字符但 anwser 对我不起作用。

我的 json 文件中有一行如下所示:

"object.0.1_foo": {  

在这种情况下我只想匹配:,其他时候我想匹配{

grep -Eo -m 1 '[\:\{\}\[\]' <<<$object

回报: {

据我了解,括号内的字符是唯一搜索的内容,如果我只要求第一个匹配项,我应该得到:

看起来 grep 被视为\:\{单个“字符”。对我来说真正奇怪的是如果我使用这个正则表达式:

grep -Eo -m 1 '[^\s][\:\{\}\[\]' <<<$object

排除尝试强制 grep 将 : 和 { 视为返回的两个不同字符的空格

":

这对我来说真的很困惑,因为它"根本不在我的正则表达式中。

我不知道如何调整我的正则表达式以仅获得单个匹配。

答案1

-m 11 次匹配后停止线;由于有两个匹配的字符,-o因此将打印它们(尽管它应该位于两个单独的行上)。

此外,字符内部是文字,[..]因此[^\s]匹配任何不是\或 的单个字符s。就您而言,这是领先的".

如果你真的只想返回:,那么你所需要的就是grep -o ':'

相关内容