我明白那个
'*' : 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,但我试图检查是否可以为这些运算符生成不同的输出。
我有一个 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)
我试过这个但没有用。
我正在学习通过 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) 根据我的理解,一个 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 工作,它将无法工作。
无论如何,有人可以对此有所了解吗?
谢谢!
我搜索了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) 我做了类似的事情:
$ cd /A/B/
$ rm -rf ./*
$ rm -rf ../**
Run Code Online (Sandbox Code Playgroud)
由于网络问题,我的系统与 Ubuntu 断开了连接。当我回来时,文件夹中没有文件或文件夹/A。
例如,如果您在主目录中并键入ls *,您将列出所有目录,并在列出的目录名称下方,列出它包含的文件。另一方面,如果您键入echo *该命令将只列出目录,而不是目录和它们拥有的内容。这是为什么?
我正在使用 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 中 …
我正在观看学习 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
正如您所看到的,在该过程结束时我成功了,但我仍然不知道为什么“[]”通配符不起作用。在我观看的视频中,该男子编写了类似于我留下的第一张图片的命令,然后创建了文件夹。有人可以解释一下为什么通配符不起作用吗?
我正在尝试列出以“s”和“l”开头的文件。
我正在尝试的命令是ls -l *sfa*