Linux 通配符行为不正确

发布于 2024-12-06 16:48:36 字数 357 浏览 0 评论 0原文

我将运行具有以下命名约定的进程列表:

a_feed
b_feed
c_feed
...

我编写了一个 bash shell 脚本,它允许我过滤掉具有这些命名模式的进程。请看下面我的 shell 脚本中的一行:

ps -ef | grep -i *_feed | grep -v grep | awk '{print $2, " ", $8, " ", $10}'

由于某种原因,grep -i *_feed 无法找到任何符合模式 *_feed 的进程。

有人知道为什么吗?

谢谢。

I will be running a list of processes that will have the following naming conventions:

a_feed
b_feed
c_feed
...

I have written a bash shell script that will allow me to filter out the processes with these naming patterns. Please look at the one line in my shell script below:

ps -ef | grep -i *_feed | grep -v grep | awk '{print $2, " ", $8, " ", $10}'

For some reason, grep -i *_feed is unable to find any process that conforms to the pattern *_feed.

Does anyone have any ideas why?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

怪我闹别瞎闹 2024-12-13 16:48:36

grep 使用正则表达式,其中 * 表示匹配 0 次或多次,而不是任何字符
您应该将其替换为 grep -i .*_feed

grep users regular expression, in which * means matches 0 or more times, and not any character.
You should replace it with grep -i .*_feed

贩梦商人 2024-12-13 16:48:36

* 前面需要一些东西。

另外,如果您的工作目录中有一个带有 *_feed 模式的文件,bash 将进行通配符扩展。

使用:

grep -i '.*_feed'

* need something in front of it.

Also, if you have a file with the pattern *_feed in your working directory bash will do wildcard expansion.

Use:

grep -i '.*_feed'
温柔戏命师 2024-12-13 16:48:36

来自 grep 手册页:

-G, --basic-regexp
将 PATTERN 解释为基本正则表达式(BRE、
见下文)。这是默认设置。

因此,默认情况下模式将是正则表达式。
在您的示例中,您可以使用 grep -i ".*_feed"

from grep man page:

-G, --basic-regexp
Interpret PATTERN as a basic regular expression (BRE,
see below). This is the default.

so, by default the pattern would be regular expression.
in your example, you could use grep -i ".*_feed"

拿命拼未来 2024-12-13 16:48:36

我通常将进程列表的输出保存在 shell 中
变量,然后搜索匹配的行作为新命令。这避免了需要 grep -v
删除正在运行的 grep 命令。

我还匹配了 awk 中的行,因此根本不需要 grep 。我认为这更容易阅读和理解:

p="$(ps -ef)"
echo "$p" | awk '/_feed/ {print $2, " ", $8, " ", $10}'

I usually save the output of the list of processes in a shell
variable and then search for the matching lines as a new command. This avoids needing a grep -v
to remove the running grep command.

I also match the lines inside awk so that no grep is needed at all. I think this is easier to read and understand:

p="$(ps -ef)"
echo "$p" | awk '/_feed/ {print $2, " ", $8, " ", $10}'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文