正则表达式从字符串中获取子字符串

Regex grab a substring from a string

任何熟悉如何使用正则表达式的人都可以抓住以下表达式:

Random1 `json:"random1"`
Random2 `json:"random2"`
Random3 `json:"random3"`

期望的输出:

random1
random2
random3

到目前为止我尝试过的:

试一试:

grep -o '(\".*?\")' example1.file 

尝试两个:

grep -o '\"*\"' example1.file

没有返回任何内容

这 returns 一切,只需要子字符串:

尝试 3

grep -E "\"(.*)\"" example1.file 

预期输出:

random1
random2
random3

您需要将 -P 与 lookarounds 一起使用,这样引号就不会包含在匹配项中。

grep -o -P '(?<").*(?=")' example1.file

这需要 GNU grep 才能获得 PCRE 的 -P 选项。

使用 GNU grep 和 Perl-compatible 正则表达式:

grep -Po '(?<=").*(?=")' file

输出:

random1
random2
random3

使用sed

sed -E 's/^.*"(.*)"`$|.*//g' example1.file

这(|.* 部分)也会清除不匹配的行。然后可以使用 ... | grep .

轻松过滤掉