我找到了这个答案:grep 的组匹配包含额外字符但 anwser 对我不起作用。
我的 json 文件中有一行如下所示:
"object.0.1_foo": {
在这种情况下我只想匹配:
,其他时候我想匹配{
。
grep -Eo -m 1 '[\:\{\}\[\]' <<<$object
回报: {
据我了解,括号内的字符是唯一搜索的内容,如果我只要求第一个匹配项,我应该得到:
看起来 grep 被视为\:\{
单个“字符”。对我来说真正奇怪的是如果我使用这个正则表达式:
grep -Eo -m 1 '[^\s][\:\{\}\[\]' <<<$object
排除尝试强制 grep 将 : 和 { 视为返回的两个不同字符的空格
":
这对我来说真的很困惑,因为它"
根本不在我的正则表达式中。
我不知道如何调整我的正则表达式以仅获得单个匹配。
答案1
-m 1
1 次匹配后停止线;由于有两个匹配的字符,-o
因此将打印它们(尽管它应该位于两个单独的行上)。
此外,字符内部是文字,[..]
因此[^\s]
匹配任何不是\
或 的单个字符s
。就您而言,这是领先的"
.
如果你真的只想返回:
,那么你所需要的就是grep -o ':'