小编Olo*_*rin的帖子

shell 逻辑运算符 &&、|| 的优先级

我试图了解逻辑运算符优先级在 bash 中是如何工作的。例如,我会期望以下命令不会回显任何内容。

true || echo aaa && echo bbb
Run Code Online (Sandbox Code Playgroud)

然而,出乎我的意料,bbb被打印出来了。

有人可以解释一下,我如何理解bash 中的复合&&||运算符?

shell bash

173
推荐指数
3
解决办法
11万
查看次数

我如何 grep 包含两个单词中的一个但不是两个单词的行?

我试图使用grep仅显示包含两个单词中的任何一个的行,如果其中一个出现在行中,但如果它们在同一行中则不显示。

到目前为止,我已经尝试过, grep pattern1 | grep pattern2 | ...但没有得到我预期的结果。

grep

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

为什么字符串命令不会停止?

strings命令的行为很奇怪,显然即使驱动器空间不足,它也不会停止写入文件。或者也许我错过了什么?

我运行以下命令:

# strings /dev/urandom > random.txt
Run Code Online (Sandbox Code Playgroud)

这一直在运行,即使在填充磁盘(常规 USB 闪存)后也没有停止。

然后为了更快,我创建了一个 ramdisk 并再次尝试相同的命令。它也没有停止。

我知道这urandom不是常规文件,并且strings的输出也被重定向,但是在上述两种情况下,该cat命令在没有更多空间时报告了错误。

# cat /dev/urandom > random.txt
cat: write error: No space left on device
Run Code Online (Sandbox Code Playgroud)
  1. 这是字符串的正常行为吗?如果是这样,为什么?
  2. 空间没了之后数据写到哪里去了?

linux shell string

30
推荐指数
1
解决办法
2248
查看次数

为什么每次有人执行`ls -l`命令时都会使用/etc/passwd?

APUE阅读,只是感到好奇:

每次用户登录 UNIX 系统和每次有人执行ls -l命令时都会使用密码文件。

ls passwd

28
推荐指数
1
解决办法
3029
查看次数

globstar 何时下降到符号链接目录?

这篇 Ask Ubuntu 帖子PATH中,我使用 globstar 在未设置时定位文件:

$ shopt -s globstar; for v in /**/vim; do [[ -x $v && -f $v ]] && echo "$v"; done
/etc/alternatives/vim
/usr/bin/vim
/usr/bin/X11/vim
Run Code Online (Sandbox Code Playgroud)

现在想来,这个输出似乎有点奇怪。/usr/bin/X11是一个符号链接/usr/bin

$ readlink /usr/bin/X11
.
Run Code Online (Sandbox Code Playgroud)

因此,那里有X11s 的无限递归,但只有第一个出现在输出中。奇怪的是, just a根本/usr/**没有下降到:X11

$ printf "%s\n" /usr/bin/** | grep X11
/usr/bin/X11
Run Code Online (Sandbox Code Playgroud)

如何协调第一个和最后一个输出?


来自评论:

我在 Ubuntu 16.04 上使用 Bash 版本 4.4.18(1)。

bash wildcards

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

unzip 使用什么方法在存档中查找单个文件?

假设我创建了 100 个文件,每个文件的大小为 30MB 的随机文本数据。现在我创建一个压缩率为 0 的 zip 存档,即zip dataset.zip -r -0 *.txt. 现在我只想从这个存档中提取一个文件。

如上所述这里,也有解压/从归档中提取文件的方法有两种:

  1. 查找文件末尾并查找中央目录。然后使用它来快速随机访问要提取的文件。(摊销O(1)复杂度)
  2. 查看每个本地标头并提取匹配的标头。(O(n)复杂性)

unzip 使用哪种方法?从我的实验来看,它似乎使用了方法 2?

zip archive

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

正则表达式搜索电子邮件列表

所以我有一个很长的电子邮件列表,我想根据电子邮件字符串的几个部分来搜索这些。

我想更有效地尝试搜索这些电子邮件,因此我想匹配电子邮件的开头。是否有一种简单的方法来匹配第一个字符/前几个字符、@ 和以下字符以及电子邮件的结尾。

这是一个示例搜索:

cal****@a**m
Run Code Online (Sandbox Code Playgroud)

因此,如果我使用以下列表中的搜索,它只会拉出前 2 个

callum@aol.com
callumsmith@aol.com
callumfrrg@test.com
someemail@test.com
Run Code Online (Sandbox Code Playgroud)

regular-expression

3
推荐指数
1
解决办法
300
查看次数

标签 统计

bash ×2

shell ×2

archive ×1

grep ×1

linux ×1

ls ×1

passwd ×1

regular-expression ×1

string ×1

wildcards ×1

zip ×1