grep 匹配精确字符串或使用通配符
grep matches exact string or with wildcard
我想搜索一个文件的内容,该文件可能包含例如:
name1
name2
name3
...
...
name10
name11
...
...
如果字符串没有通配符 (*),则搜索应该匹配该字符串。例如:
grep -w name1 filename
它returns正是我想要的:
file1 #ignores file10 & file11 as no wildcard used
但是当我使用相同的命令但使用通配符(*)时,如下:
grep -w name1* filename
它也 returns 仅 file1。没有 file10 和 file11。我怎样才能将字符串与第一种情况完全匹配,并且当使用 (*) 时它应该包括其他的?
Note: I have seen some answers suggested using .* instead of * it
worked but for my application the input is coming always in the form
of * not .*
提前致谢。
grep
使用 regex 进行模式匹配。 grep -w 'name1*'
会匹配零个或多个 1
,因此 name1
和 name11
会匹配。
如果它只为你匹配 name1
那是因为你在目录中有一个名为 name1
的文件并且未加引号的 name1*
将被 shell 解释(球)。始终在包含特殊字符的参数周围使用引号。如果您使用变量,请始终在其周围放置 "
。
要使其匹配任何以 name1
开头的名称,请将其设为
grep -w 'name1.*' filename
.
表示“任意字符”
.*
表示“任意字符,零次或多次”。
如果输入来自某些使用 *
作为通配符的外部源,您需要在调用 grep.
之前更改该字符串
示例:
search_str='name1*'
new_search_str="$(sed 's/\*/.*/g' <<< "$search_str")"
grep -w "$new_search_str" filename
我想搜索一个文件的内容,该文件可能包含例如:
name1
name2
name3
...
...
name10
name11
...
...
如果字符串没有通配符 (*),则搜索应该匹配该字符串。例如:
grep -w name1 filename
它returns正是我想要的:
file1 #ignores file10 & file11 as no wildcard used
但是当我使用相同的命令但使用通配符(*)时,如下:
grep -w name1* filename
它也 returns 仅 file1。没有 file10 和 file11。我怎样才能将字符串与第一种情况完全匹配,并且当使用 (*) 时它应该包括其他的?
Note: I have seen some answers suggested using .* instead of * it worked but for my application the input is coming always in the form of * not .*
提前致谢。
grep
使用 regex 进行模式匹配。 grep -w 'name1*'
会匹配零个或多个 1
,因此 name1
和 name11
会匹配。
如果它只为你匹配 name1
那是因为你在目录中有一个名为 name1
的文件并且未加引号的 name1*
将被 shell 解释(球)。始终在包含特殊字符的参数周围使用引号。如果您使用变量,请始终在其周围放置 "
。
要使其匹配任何以 name1
开头的名称,请将其设为
grep -w 'name1.*' filename
.
表示“任意字符”.*
表示“任意字符,零次或多次”。
如果输入来自某些使用 *
作为通配符的外部源,您需要在调用 grep.
示例:
search_str='name1*'
new_search_str="$(sed 's/\*/.*/g' <<< "$search_str")"
grep -w "$new_search_str" filename