标签: wildcards

如何显示 '*' 、 '+' 和 '?' 用法之间的差异 在grep?

我明白那个

'*' : The preceding item will be matched zero or more times.
'?' : The preceding item is optional and will be matched, at most, once.
'+' : The preceding item will be matched one or more items
Run Code Online (Sandbox Code Playgroud)

谁能给我举个例子,说明在使用 grep 时什么时候会有所不同?我正在使用 egrep,但我试图检查是否可以为这些运算符生成不同的输出。

regex grep wildcards

5
推荐指数
1
解决办法
556
查看次数

有没有办法在 systemd 单元中使用通配符、重定向或其他 shell 语法?

我有一个 systemd 文件来启动一个 jar 文件。但我想将 jar 文件作为*.jar. 有没有办法做到这一点?

[Unit]
Description=Test Background

[Service]
ExecStart=/usr/bin/java -jar /var/www/test.com/*.jar
Type=simple
WorkingDirectory=/var/www/test.com

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我试过这个但没有用。

services systemd wildcards

5
推荐指数
1
解决办法
1197
查看次数

为什么没有通配符“?” 工作?

我正在学习通过 WSL 在 Ubuntu 上使用终端。现在我正在练习通配符,但是?通配符对我不起作用。

正如您所看到的,*通配符有效,但这个无效:

$ ls file*
file.html file.js file.txt
$ ls dot*
dot.txt dot1902.html dot2.txt
$ ls *.html
archivoPruebaClase.html dot1902.html file.html
$ ls dot?
ls: cannot access 'dot?': No such file or directory
$ ls index?
ls: cannot access 'index?': No such file or directory
Run Code Online (Sandbox Code Playgroud)

command-line bash wildcards

5
推荐指数
1
解决办法
2081
查看次数

命令(即 grep)如何知道它何时作为 glob 扩展的一部分运行?

根据我的理解,一个 glob 通配符由 shell 解释,然后为每个匹配的文件名运行给定的命令。假设我有文件:abc1, abc2, and abc3在我的当前目录中。然后,例如,echo abc*将为每个以 'abc' 开头的文件名回显一次。

但是,如果我运行grep 'foo' abc*,我想这应该运行:

grep 'foo' abc1
grep 'foo' abc2
grep 'foo' abc3
Run Code Online (Sandbox Code Playgroud)

这意味着我应该得到以下输出(假设所有文件都包含一行显示“foo”):

foo
foo
foo
Run Code Online (Sandbox Code Playgroud)

然而,我得到:

abc1:foo
abc2:foo
abc3:foo
Run Code Online (Sandbox Code Playgroud)

所以我认为对此有两种可能的解释。首先,grep 以某种方式可以检测到它是否与 glob 表达式一起使用,并通过在匹配之前输出文件名来响应。其次,由于您可以将多个文件传递给 grep,shell 实际上只运行 1 个命令:

grep 'foo' abc1 abc2 abc3

但是,这只有效,因为 grep 最后接受多个文件。另一个命令可能只允许传入 1 个文件。因此,如果您想为与 glob 匹配的多个文件运行该命令,则如果通过上述第二种方法进行 globbing 工作,它将无法工作。

无论如何,有人可以对此有所了解吗?

谢谢!

command-line bash wildcards

4
推荐指数
1
解决办法
373
查看次数

星号不适用于 grep

我搜索了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)

command-line regex grep text-processing wildcards

4
推荐指数
2
解决办法
1828
查看次数

如果我们执行 rm -rf ../** 会发生什么?我们可以恢复数据吗?

我做了类似的事情:

$ cd /A/B/
$ rm -rf ./*
$ rm -rf ../**
Run Code Online (Sandbox Code Playgroud)

由于网络问题,我的系统与 Ubuntu 断开了连接。当我回来时,文件夹中没有文件或文件夹/A

command-line rm wildcards

3
推荐指数
2
解决办法
4104
查看次数

为什么 'echo *' 给出的结果与 'ls *' 不同?

例如,如果您在主目录中并键入ls *,您将列出所有目录,并在列出的目录名称下方,列出它包含的文件。另一方面,如果您键入echo *该命令将只列出目录,而不是目录和它们拥有的内容。这是为什么?

ls wildcards echo

2
推荐指数
1
解决办法
107
查看次数

Grep排除通配符不起作用

我正在使用 Ubuntu 14.04 LTS。

我正在玩 grep,我遇到了一个问题,将 grep 管道传递到 ls。所有示例仅限于当前目录,非递归。

如果我想列出名称中包含数字的所有文件:

ls | grep [0-9]
Run Code Online (Sandbox Code Playgroud)

如果我想列出所有包含“d”、“h”、“m”作为首字母的文件:

ls | grep ^[dhm]
Run Code Online (Sandbox Code Playgroud)

如果我想列出所有包含数字作为首字母的文件:

ls | grep ^[0-9]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用!inside 时[]!不包括:

user@host:~$ ls | grep [0-9]
1.log
2.log
3.log
hs_err_pid4015.log
Untitled 1.odt
v1.odt

user@host:~$ ls | grep [!0-9]
1.log
2.log
3.log
hs_err_pid4015.log
Untitled 1.odt
v1.odt
Run Code Online (Sandbox Code Playgroud)

如果我尝试将它与 ^

user@host:~$ ls | grep ^[0-9]
1.log
2.log
3.log

user@host:~$ ls | grep ^[!0-9]
1.log
2.log
3.log
Run Code Online (Sandbox Code Playgroud)

我花了几天时间阅读有关 grep 和通配符的其他帖子、手册页、文章等,但我无法弄清楚。我试过把它们放在'and 中 …

command-line regex grep wildcards

2
推荐指数
1
解决办法
2765
查看次数

[] 通配符不起作用

我正在观看学习 Linux 通配符的培训视频,我学习了其中的一些通配符,例如 {}、*、?、[] 等。之后我想做一些练习,并尝试在一个文件夹中创建 300 个目录,其名称如下文件夹1,文件夹2,文件夹3 ...,然后我尝试创建100个文件,它们的名称类似于file1.txt,file2.txt,file3.txt ...然后我将这些命令写入终端:

https://i.stack.imgur.com/7kOMn.png

我意识到我无法创建我想要的东西,所以我尝试了另一个通配符“{}”,之后我将这些命令写入终端:

https://i.stack.imgur.com/E576w.png

正如您所看到的,在该过程结束时我成功了,但我仍然不知道为什么“[]”通配符不起作用。在我观看的视频中,该男子编写了类似于我留下的第一张图片的命令,然后创建了文件夹。有人可以解释一下为什么通配符不起作用吗?

wildcards 20.04

0
推荐指数
1
解决办法
590
查看次数

如何使用 shell 命令列出第一个字符为“s”、最后一个字符为“l”的文件?

我正在尝试列出以“s”和“l”开头的文件。

我正在尝试的命令是ls -l *sfa*

command-line bash wildcards

-5
推荐指数
1
解决办法
3530
查看次数

标签 统计

wildcards ×10

command-line ×6

bash ×3

grep ×3

regex ×3

20.04 ×1

echo ×1

ls ×1

rm ×1

services ×1

systemd ×1

text-processing ×1