小编ter*_*don的帖子

使用带有 --exclude-dir 标志的 grep 来排除多个目录

我在 Ruby on Rails 应用程序中搜索grep在 OSX 上使用的单词,我想排除匹配特定模式的目录。

我正在使用以下命令:

grep -inRw -E 'direct' . --exclude-dir -E 'git|log|asset'
Run Code Online (Sandbox Code Playgroud)

这个命令没有做我认为它会做的事情。这是我认为它会起作用的方式:

  • i - 不区分大小写的搜索
  • n - 打印找到模式的行号
  • R - 递归搜索
  • w - 我只想要整个单词 - 即匹配“direct”而不是“directory”
  • -E - 使用扩展正则表达式
  • 'direct' - 我想匹配的正则表达式
  • . - 在当前目录中搜索
  • --exclude-dir -E 'git|log|asset' - 排除匹配 git 或日志或资产的目录。

在排除目录方面,该命令最终仍会在“./git”“./log”目录以及“./app/assets”中搜索

我显然缺乏基本的知识,但我不知道它是什么。

grep regular-expression

36
推荐指数
3
解决办法
5万
查看次数

反转布尔变量

我想尝试简单的脚本

flag=false
while !$flag
do
   read x
   if [ "$x" -eq "true" ]
   then
     flag=true
   fi
   echo "${x} : ${flag}"
done
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,如果我输入true,我会看到那个x="true"and flag="true",但循环并没有结束。脚本有什么问题?如何正确反转布尔变量?

scripting bash

34
推荐指数
3
解决办法
5万
查看次数

为什么 Plan 9 使用“snarf”而不是“copy”?

当您观看有关 Plan 9 及其acme编辑器的演示时,您可能会注意到copy的名称是snarf(不幸的是,我找不到任何有意义的解释)。

为什么会这样?

有什么原因吗?是否已为此功能创建唯一名称,因为副本可能不是最佳名称?


参考:

  • 维基百科(链接)

    Snarf,在 Blit 和 Plan 9 窗口系统中用于“复制”操作的术语。

  • cat-v.org(链接)

    单击中键还有另一个菜单可用;剪切和粘贴是不言自明的,而 Snarf 只是计划 9 中复制的词。

  • 9fans 邮件列表(链接)

    通过plan9port在Plan 9和/或Mac OS X下使用acme中的一个/两个,是否有一个可以在acme中打开的“文件”,显示acme snarf缓冲区的当前内容?

    /dev/snarf
    
    Run Code Online (Sandbox Code Playgroud)

    所以看起来有一个类似于snarf 缓冲区的东西和一个名为/dev/snarf.

  • 9term 手册页(链接)

    在键盘上键入的字符替换选定的文本;如果此文本不为空,则将其放置在所有窗口通用但与 sam(1) 不同的 snarf 缓冲区中。

    (……)

    从按钮 2 上的菜单中选择编辑操作。剪切操作从屏幕上删除所选文本并将其放入 snarf 缓冲区;snarf 将选定的文本复制到缓冲区而不删除它;paste 用缓冲区的内容替换选定的文本;并将 snarf 缓冲区的副本发送到输出点之后,如果缺少则添加最终换行符。Paste 有时和 send 将始终在输出点之后放置文本;如此放置的文本的行为与上述完全相同。因此,在输出点后粘贴包含换行符的文本时,最好先打开保持模式。

  • 探索 Acme教程(链接)

    'Snarf':在大多数其他编辑器中称为 copy

  • snarf 的dictionary.com 定义(链接)

    • (非正式的)贪婪地吃或喝

    • (当代)贪婪地抢夺某物,尤其是。没有经过允许

    • (Unix) …

terminology history plan9 command-names

34
推荐指数
1
解决办法
2412
查看次数

如何剪切到第一个分隔符并获取字符串的剩余部分?

如何剪切到第一个分隔符/并获取字符串的剩余部分?

前任:

pandi/sha/Dev/bin/boot
Run Code Online (Sandbox Code Playgroud)

我想削减pandi,所以输出像

sha/Dev/bin/boot
Run Code Online (Sandbox Code Playgroud)

bash text-processing

34
推荐指数
2
解决办法
6万
查看次数

Linux 支持的最大 RAM 是多少?

Linux 可支持的最大 RAM 是多少?假设硬件是/支持 64 位。在所有 Linux 发行版中。

它是高达 16 艾字节,还是像 Windows 一样有限,我认为它是 192 GB?

linux memory

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

以 bash 开头:-lt 和 -gt 参数

我从 bash 开始,发现以下内容:

if test $first -lt $second
then
  echo $first is lower than $second
else
  if test $first -gt $second
  then
    echo $first is higher than $second
  else
    echo $first and $second are equals
  fi
fi
Run Code Online (Sandbox Code Playgroud)

为了阅读脚本并执行它,我知道它的作用,但不知道 -lt 和 -gt 的用途。

有人可以告诉我这种“工具”的名称是什么以及它们(-lt 和 -gt)是做什么的?谢谢!

shell bash test

32
推荐指数
2
解决办法
26万
查看次数

我怎样才能给管道计时?

我想要time一个命令,它由两个单独的命令组成,一个管道输出到另一个。例如,考虑以下两个脚本:

$ cat foo.sh
#!/bin/sh
sleep 4

$ cat bar.sh
#!/bin/sh
sleep 2
Run Code Online (Sandbox Code Playgroud)

现在,我怎样才能time报告所花费的时间foo.sh | bar.sh(是的,我知道管道在这里没有意义,但这只是一个例子)?如果我在没有管道的子shell中按顺序运行它们,它确实按预期工作:

$ time ( foo.sh; bar.sh )

real    0m6.020s
user    0m0.010s
sys     0m0.003s
Run Code Online (Sandbox Code Playgroud)

但是我在管道时无法让它工作:

$ time ( foo.sh | bar.sh )

real    0m4.009s
user    0m0.007s
sys     0m0.003s

$ time ( { foo.sh | bar.sh; } )

real    0m4.008s
user    0m0.007s
sys     0m0.000s

$ time sh -c "foo.sh | bar.sh "

real    0m4.006s
user    0m0.000s
sys     0m0.000s
Run Code Online (Sandbox Code Playgroud)

我已经阅读了一个类似的问题(How to …

shell bash pipe time

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

是否有用于将 html 文件转换为 pdf 的命令行工具?

我想在 Docker 映像中安装一个命令行工具,以便快速将 *html 文件转换为 *pdf 文件。

我很惊讶没有一个 Unix 工具来做这样的事情。

command-line software-rec pdf html conversion

32
推荐指数
3
解决办法
4万
查看次数

GZip 在 macOS 和 Linux 上不会产生相同的压缩结果

我有几千个单独 GZip 压缩的文件(当然通过 -n标志,因此输出是确定性的)。然后他们进入一个 Git 存储库。我刚刚发现,对于其中 3 个文件,Gzip 在 macOS 和 Linux 上不会产生相同的输出。下面是一个例子:

苹果系统

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | shasum -a 256
0ac378465b576991e1c7323008efcade253ce1ab08145899139f11733187e455  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip --fast -n | shasum -a 256
6e145c6239e64b7e28f61cbab49caacbe0dae846ce33d539bf5c7f2761053712  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip -n | shasum -a 256
3562fd9f1d18d52e500619b4a5d5dfa709f5da8601b9dd64088fb5da8de7b281  -

$ gzip --version
Apple gzip 272.250.1
Run Code Online (Sandbox Code Playgroud)

Linux

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | shasum -a 256
0ac378465b576991e1c7323008efcade253ce1ab08145899139f11733187e455  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip --fast -n | shasum -a 256
10ac8b80af8d734ad3688aa6c7d9b582ab62cf7eda6bc1a0f08d6159cad96ddc  -

$ cat …
Run Code Online (Sandbox Code Playgroud)

linux gzip macos

32
推荐指数
3
解决办法
5412
查看次数

Linux 如何处理 shell 脚本?

对于这个问题,让我们考虑一个 bash shell 脚本,尽管这个问题必须适用于所有类型的 shell 脚本。

当有人执行 shell 脚本时,Linux 是一次性加载所有脚本(可能是到内存中)还是逐行读取脚本命令

换句话说,如果我执行一个shell脚本并在执行完成之前将其删除,执行会被终止还是会继续执行?

linux shell shell-script

31
推荐指数
3
解决办法
7538
查看次数