grep filename[asterisk] returns unexpected result

grep 带星号的文件名 返回了意外的结果

grep filename[asterisk] returns unexpected result [1]

1
2
3
4
5
$ ls
file1.txt file2.txt 'file*.txt'

$ ls | grep file*.txt
无输出

在执行grep命令之前,*先被 shell expanded 了,所以实际执行的命令是ls | grep file1.txt file2.txt 'file*.txt'

就变成了在 file2.txt 和 ‘file*.txt’ 中查找 ‘file1.txt’ 这个文本,而因为已经有文件输入,ls 的管道被忽略了

验证

1
2
3
echo 'no file1.txt' > file2.txt
$ ls | grep file*.txt
file2.txt:no file1.txt

所以,如果想只查找 ‘file*.txt’,则可以加引号

1
2
$ ls | grep '*.txt'
file*.txt

如果想使用其正则功能,则需要加上 -E

1
2
3
4
$ ls | grep -E '*.txt'
file1.txt
file2.txt
file*.txt

  1. https://stackoverflow.com/questions/20473441/grep-filenameasterisk-returns-unexpected-result ↩︎