0

我需要在模式匹配后提取所有字符。

例如 ,

NAME=John

Age=16

我需要提取“=”之后的所有字符。输出应该像

John

16

由于某些限制,我不能为此使用 perl 或 Jython。我尝试使用 grep ,但据我所知,我仅如下所示

echo "NAME=John" |grep -o -P '=.{0,}'

4

2 回答 2

0

你非常接近:

grep -oP '(?<=\w=)\w+' file

成功了。

解释

它会在之后查找任何单词word=并打印出来。

  • -o代表“仅打印匹配行的匹配(非空)部分,每个这样的部分在单独的输出行上”
  • -P代表“将 PATTERN 解释为 Perl 正则表达式”
  • (?<=\w=)\w+表示:仅匹配\w+以下word=. 更多信息请参见 [Regex tutorial - Lookahead][1] 和 [this nice explanation by sudo_O][2]。

测试

$ cat file
NAME=John
Age=16
$ grep -oP '(?<=\w=)\w+' file
John
16
于 2013-06-20T09:45:37.413 回答
0

一种 sed 解决方案

sed -ne 's/.*=//gp' <filename>

另一个 awk 解决方案

awk -F= '$0=$2' <filename>

解释:

sed我们删除从行首到 a 的所有内容=并打印其余部分。在awk我们将字符串分成两部分,用 分隔=,然后$0=$2用第二部分替换整个字符串

于 2013-06-20T09:54:28.070 回答