我有一个名为 example 的文件
$ cat example
kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
Run Code Online (Sandbox Code Playgroud)
当我grep用来获取之前有空格的行时.pdf,我似乎无法获取它。
grep *.pdf example
Run Code Online (Sandbox Code Playgroud)
什么都不返回,(我想说,“grep,在之前匹配零个或多个空格.pdf”,但没有结果)
如果我使用:
grep i*.pdf example
kali.pdf
linux.pdf
ubuntu.pdf
example.pdf.
this.pdf
grep .pdf
Run Code Online (Sandbox Code Playgroud)
所有行都返回,因为我在说“grep,匹配我i一次或零次,好的。”
最后:
grep " *.pdf" example
Run Code Online (Sandbox Code Playgroud)
没有结果返回
对于这个样本,我想看看
grep .pdf
Run Code Online (Sandbox Code Playgroud)
作为输出
我的想法有什么问题?
我希望能够写入* 我的脚本,并保持*原样(即,没有扩展)。
Bash 会尝试用匹配此模式的本地文件替换它,如果此模式不存在,bash 将不加修改地传递星号。
我不想逃。我知道这是可能的( *, '*' )。
例如
myscript --arg * --- will pass local files to the script
myscript --arg=* --- will pass "--arg=*", since there are no filenames starting with "--arg=<...>"
Run Code Online (Sandbox Code Playgroud)
我可以告诉 bash 在某些情况下跳过通配符解释吗?例如,以myscript?开头的命令
*RE 开头的语义是什么?有记录(man 7 regex)它只匹配基本 RE *(即,它变成普通字符),但是扩展 RE 会发生什么?通过示例,它看起来与 '.*' 具有相同的语义,但我找不到任何来源。
prompt> echo "hello" | grep -E '*'
hello
prompt> echo "hello" | grep '*'
prompt>
Run Code Online (Sandbox Code Playgroud) 我搜索了ki与*按下面的例子,它应该已经回到了前三行。我不确定为什么它在没有ki匹配的情况下返回最后一行。
$ grep "ki*" trial_file.txt
kartik,27,Bangalore,Karnataka
pulkit,25,Bangalore,Karnataka
kit,28,Bangalore,Karnataka
kush,24,Pennsylvania,Philadelphia
Run Code Online (Sandbox Code Playgroud)