我被困在尝试grep之后name=
,只包括空格和字母数字.
例如:
name=some value here
Run Code Online (Sandbox Code Playgroud)
我明白了
some value here
Run Code Online (Sandbox Code Playgroud)
我完全是新手,以下grep匹配包括的所有内容name=
.
grep 'name=.*' filename
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.
mar*_*ets 106
如此处所述,您需要一个积极的lookbehind子句,例如:
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
Run Code Online (Sandbox Code Playgroud)
-P使grep使用Perl方言,否则你可能需要转义括号.如其他地方所述,您还可以附加-o
参数以仅打印匹配的内容.括号中的部分指定您需要字母数字和空格.
使用正向lookbehind子句的优点是"name ="文本不是匹配的一部分.如果grep突出显示匹配的文本,则只会突出显示字母数字(和空格)部分.-o参数也不会显示"name ="部分.并且,如果你将它转换到另一个程序,比如可能捕获文本并对其执行某些操作的sed,你将不会捕获"name ="部分,尽管你也可以通过使用捕获parenthess来实现.
Joh*_*nck 22
试试这个:
sed -n 's/^name=//p' filename
Run Code Online (Sandbox Code Playgroud)
它告诉sed默认打印(-n),用前缀替换你的前缀,如果发生替换则打印.
奖励:如果你真的需要它只匹配只有空格和字母数字的条目,你也可以这样做:
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
Run Code Online (Sandbox Code Playgroud)
在这里,我们添加了一个匹配空格和字母数字的模式,直到行结束($),如果我们匹配,我们用括号中的组替换并打印.
grep 不会像您期望的那样提取。你需要的是
grep "name=" file.txt | cut -d'=' -f1-
Run Code Online (Sandbox Code Playgroud)
高克
echo "name=some value here" | awk -F"=" '/name=/ { print $2}'
Run Code Online (Sandbox Code Playgroud)
或用bash
str="name=some value here"
IFS="="
set -- $str
echo $1
unset IFS
Run Code Online (Sandbox Code Playgroud)
要么
str="name=some value here"
str=${str/name=/}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
46525 次 |
最近记录: |