如何使用grep获取`name =`之后的任何内容?

我试图在name=后面加上grep,只包含空格和字母数字。

例如:

 name=some value here 

我明白了

 some value here 

我在这是完全新鲜的,下面的grep匹配一切,包括name=

 grep 'name=.*' filename 

任何帮助深表感谢。

如这里所详述的,您需要一个积极的lookbehind子句,例如:

 grep -P '(?<=name=)[ A-Za-z0-9]*' filename 

-P使grep使用Perl方言,否则你可能需要转义括号。 正如其他地方所指出的,你也可以附加-o参数来打印出只匹配的内容。 括号内的部分指定您想要字母数字和空格。

使用积极lookbehind子句的优点是“name =”文本不是匹配的一部分。 如果grep突出显示匹配的文本,则只会突出显示字母数字(和空格)部分。 -o参数也不会显示“name =”部分。 而且,如果将其转换为另一个可能会捕获文本并使用它的程序(如sed),则不会捕获“name =”部分,尽pipe您也可以使用捕获圆括号来完成此操作。

尝试这个:

 sed -n 's/^name=//p' filename 

它告诉sed在默认情况下不打印任何东西(-n),用什么都replace前缀,如果replace发生则打印。

奖励:如果你真的需要它只匹配空格和字母数字的条目,你也可以这样做:

 sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename 

在这里,我们添加了一个模式来匹配空格和字母数字,直到行($)结束,如果我们匹配,我们用圆括号replace组并打印。

grep不会像你期望的那样提取。 你需要的是

 grep "name=" file.txt | cut -d'=' -f1- 

呆子

 echo "name=some value here" | awk -F"=" '/name=/ { print $2}' 

或与bash

 str="name=some value here" IFS="=" set -- $str echo $1 unset IFS 

要么

 str="name=some value here" str=${str/name=/} 

grep会打印整个行匹配模式。 要仅打印匹配的模式,请使用grep -o选项。 您可能还需要使用sed来删除名称=模式的一部分。

 grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d