我只是在name=
之后尝试grep任何东西,只包含空格和字母数字。
e.g:
name=some value here
我得到了
some value here
我完全是新手,以下grep匹配包括name=
在内的所有内容。
grep 'name=.*' filename
非常感谢任何帮助。
答案 0 :(得分:101)
详细here,您需要一个积极的lookbehind子句,例如:
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
-P使grep使用Perl方言,否则你可能需要转义括号。如其他地方所述,您还可以附加-o
参数以仅打印匹配的内容。括号中的部分指定您需要字母数字和空格。
使用正面lookbehind子句的好处是“name =”文本不是匹配的一部分。如果grep突出显示匹配的文本,则只会突出显示字母数字(和空格)部分。 -o参数也不会显示“name =”部分。并且,如果你将它转换到另一个可能捕获文本并对其执行某些操作的程序,那么你将不会捕获“name =”部分,尽管你也可以通过使用捕获parenthess来实现。
答案 1 :(得分:22)
试试这个:
sed -n 's/^name=//p' filename
它告诉sed默认打印(-n),用什么都替换你的前缀,如果发生替换则打印。
奖励:如果你真的需要它只匹配只有空格和字母数字的条目,你也可以这样做:
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
这里我们添加了一个匹配空格和字母数字的模式,直到行结束($),如果匹配,我们用括号中的组替换并打印。
答案 2 :(得分:4)
grep不像你期望的那样提取。你需要的是
grep "name=" file.txt | cut -d'=' -f1-
答案 3 :(得分:4)
gawk的
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=/}
答案 4 :(得分:1)
grep将打印与模式匹配的整行。要仅打印匹配的模式,请使用grep -o选项。您可能还需要使用sed来删除模式的名称=部分。
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d