我file
有
denm.xyz
denm.abc
denm.def
denm_xyz
denm_abc
denm_def
我想提取其中的内容.
。
我试过
grep "denm\.*" file
grep 'denm\.*' file
sed "/denm\.*/p" file
sed '/denm\.*/p' file
这些东西与file
但是使用awk
awk '/denm\./' file
有效!!
我如何使用grep
或做同样的事情sed
答案1
你已经接近了,你只需要删除,*
这意味着在本例中,前一个标记有零个或多个匹配项.
。结果demn_
也会显示在结果中,因为它符合零的条件.
。
因此你可以这样做:
grep 'denm\.' file.txt
同样地,在sed
:
sed -n '/denm\./p' file.txt
请注意,您错过了-n
选项sed
,如果没有它sed
也会打印所有行。
还可以添加很多级别的精度,以便在复杂情况下准确获得您想要的结果,但请将其作为开始。
例子:
% grep 'denm\.' file.txt
denm.xyz
denm.abc
denm.def
% sed -n '/denm\./p' file.txt
denm.xyz
denm.abc
denm.def
答案2
\.*
表示“字符.
”的出现次数为任意次,包括零次。由于带下划线的文件名以 开头,denm
后面跟着零次出现的字符.
,因此它们是匹配的。grep "denm\." file
将起作用。
答案3
如果您需要的只是其中包含的行.
,请使用带有固定字符串的 grep 而不是正则表达式:
grep -F . file
从man grep
:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by
newlines, any of which is to be matched. (-F is specified by
POSIX.)
对于固定字符串,所有正则表达式特殊字符都失去其含义。
sed
没有对应的选项。
答案4
我倾向于使用括号而不是反斜杠来转义:
egrep "denm[.].*" file
sed -r 's/denm[.]/.../'
这省去了我思考是否以及如何转义反斜杠的麻烦。(.*
这里的最后一个是多余的。)