命令行参数不适用于 Bash 中的 "grep" 命令

Command line argument is not working for "grep" command in Bash

#! /bin/bash


grep -oh \w*ings ""

虽然上面的命令在终端中运行,但我无法找出脚本中的问题

我正在尝试查找文件中以 'ing'

结尾的所有单词

对于grep,字符串w*ings是一个正则表达式。对于 shell,字符串 w*ings 是一个 glob。字符串 \w*ings 是一个带有转义 w 的 glob。 shell 会将字符串 \w*ings 转换为 w*ings,然后(我实际上不确定这里的顺序;我们可以查看文档,但这并不重要)它将查看当前目录以查看该 glob 是否与任何文件匹配。如果目录中有多个文件,它将扩展到它们。例如,如果您有文件 waingswbings,那么 shell 会将这两个文件作为参数传递给 grep。假设 </code> 扩展为 <code>foogrep 将得到参数:-ohwaingswbingsfoo如果您调用了 grep -oh waings wbings foo。这几乎肯定不是您想要的。您可能打算将文字字符串 \w*ings 传递给 grep,因此您应该这样做:

grep -oh '\w*ings' "" 

但是从你的评论来看,你似乎真的想做这样的事情:

 grep -o '[[:<:]][_[:alnum:]]*ing[[:>:]]' ""

grep -ow '[_[:alnum:]]*ing' ""

(-w 相当于将模式包装在 [[:<:]][[:>:]])

这将是

grep -oh '.*wings'  ""