我需要在模式匹配后提取所有字符。
例如,
NAME=John
Age=16
我需要在“=”之后提取所有字符。输出应该像
John
16
由于某些限制,我不能为此目的使用perl或Jython。 我尝试用grep,但据我所知,我的来法如下所示
echo "NAME=John" |grep -o -P '=.{0,}'
答案 0 :(得分:0)
你非常接近:
grep -oP '(?<=\w=)\w+' file
成功。
它在word=
之后查找任何单词并打印出来。
-o
代表“仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行”。-P
代表“将PATT解释为Perl正则表达式”。(?<=\w=)\w+
表示:仅在\w+
后匹配word=
。 [正则表达式教程 - Lookahead] [1]和[sudo_O这个很好的解释] [2]中的更多信息。$ cat file
NAME=John
Age=16
$ grep -oP '(?<=\w=)\w+' file
John
16
答案 1 :(得分:0)
一种解决方案
sed -ne 's/.*=//gp' <filename>
另一个awk解决方案
awk -F= '$0=$2' <filename>
说明:
在sed
中,我们从一行的开头删除任何内容,直到=
并打印其余部分。
在awk
中我们将字符串分成两部分,由=
分隔,现在$0=$2
正在用第二部分替换整个字符串