如何使用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