我一直在尝试grep之后的任何内容,仅name=
包含空格和字母数字。
例如:
name=some value here
我懂了
some value here
我对此完全陌生,以下grep匹配包括在内的所有内容name=
。
grep 'name=.*' filename
任何帮助深表感谢。
Answers:
至于详细的在这里,你想有一个积极的回顾后条款,如:
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
-P使grep使用Perl方言,否则您可能需要转义括号。如别处所述,您还可以附加-o
参数以仅打印出匹配的内容。方括号中的部分指定您需要字母数字和空格。
使用肯定的lookbehind子句的优点是“ name =”文本不属于匹配项。如果grep突出显示匹配的文本,则只会突出显示字母数字(和空格)部分。-o参数也将不显示“名称=”部分。而且,如果将其转换为sed之类的其他程序,该程序可能会捕获文本并对其执行某些操作,尽管您也可以使用捕获括号来做到这一点,但您将不会捕获“ name =“部分。
\K
模式,因为它使我更容易阅读,例如grep -oP 'name=\K[ A-Za-z0-9]*' filename
。此外,perl的文档要求提高性能与\K
。不知道这是否适用于一般的PCRE引擎还是仅适用于perl实施
尝试这个:
sed -n 's/^name=//p' filename
它告诉sed默认不打印任何内容(-n),不使用前缀替换前缀,并在替换发生时进行打印。
奖励:如果您真的需要它仅匹配仅包含空格和字母数字的条目,则也可以这样做:
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
在这里,我们添加了一个模式以仅在行($)的末尾匹配空格和字母数字,如果匹配,则将组替换为括号并打印。
sed
。感谢您的提示!
grep不会像您期望的那样提取。您需要的是
grep "name=" file.txt | cut -d'=' -f1-
grep将在与模式匹配的位置打印整行。要仅打印匹配的模式,请使用grep -o选项。您可能还需要使用sed删除模式的name =部分。
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d
echo 'name=some value here' | grep -Po 'name=\K[ A-Za-z0-9]*'