我需要在模式匹配后提取所有字符。
例如 ,
NAME=John
Age=16
我需要提取“=”之后的所有字符。输出应该像
John
16
由于某些限制,我不能为此使用 perl 或 Jython。我尝试使用 grep ,但据我所知,我仅如下所示
echo "NAME=John" |grep -o -P '=.{0,}'
我需要在模式匹配后提取所有字符。
例如 ,
NAME=John
Age=16
我需要提取“=”之后的所有字符。输出应该像
John
16
由于某些限制,我不能为此使用 perl 或 Jython。我尝试使用 grep ,但据我所知,我仅如下所示
echo "NAME=John" |grep -o -P '=.{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
一种 sed 解决方案
sed -ne 's/.*=//gp' <filename>
另一个 awk 解决方案
awk -F= '$0=$2' <filename>
解释:
在sed
我们删除从行首到 a 的所有内容=
并打印其余部分。在awk
我们将字符串分成两部分,用 分隔=
,然后$0=$2
用第二部分替换整个字符串