如何逃避“。” 用 sed 还是 grep?

Ram*_*ddy 6 command-line bash grep sed

我有file

denm.xyz
denm.abc
denm.def
denm_xyz
denm_abc
denm_def
Run Code Online (Sandbox Code Playgroud)

我想提取其中的那些.

我试过

grep "denm\.*" file
grep 'denm\.*' file

sed "/denm\.*/p" file
sed '/denm\.*/p' file
Run Code Online (Sandbox Code Playgroud)

这些东西与世界上的一切相匹配 file

然而使用 awk

awk '/denm\./' file 
Run Code Online (Sandbox Code Playgroud)

工作了!!

我如何使用grep或做同样的事情sed

hee*_*ayl 13

在这种情况下,您很接近,您只需要删除*这意味着前面标记的零个或多个匹配项.。结果demn_也显示在结果中,因为它与条件零匹配.

所以你可以这样做:

grep 'denm\.' file.txt 
Run Code Online (Sandbox Code Playgroud)

同样在sed

sed -n '/denm\./p' file.txt
Run Code Online (Sandbox Code Playgroud)

请注意,您错过了-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
Run Code Online (Sandbox Code Playgroud)


fkr*_*iem 7

\.*表示“该字符出现的任意次数.”,包括零次。由于您的下划线文件名以 开头,denm后跟零次出现的字符.,因此它们是匹配的。grep "denm\." file将工作。