匹配后提取所有字符 - shell脚本

时间:2013-06-20 09:42:24

标签: shell

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

例如,

NAME=John

Age=16

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

John

16

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

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

2 个答案:

答案 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正在用第二部分替换整个字符串