标签: gnu

使用 GNU sed 提取可能由空行分隔的两个模式行之间的标头名称

我有以下文件:

------

Introduction
----------
Optio eum enim ut. Et quia molestias eos. Doloribus laborum quia quae. Magnam cupiditate quis consectetur.

-----
Chapter1: Foo
-----

Odit beatae eius voluptas temporibus sint quia. Eos et tempora similique laboriosam optio consequatur quibusdam. Fugit suscipit cupiditate ea perspiciatis rem labore cum eos.

-----
Chapter bar


-----
Et consequatur quia quia et architecto et sunt. Perferendis qui deserunt qui est illo est sapiente ipsam. Fugiat vel amet magni in quam. Eligendi totam cum sapiente harum …
Run Code Online (Sandbox Code Playgroud)

linux sed gnu

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

Fedora 存储库中的 gnu tar 和 tar 包之间的区别

Fedora 中的 tar 手册页(以及die.net 上的 tar 手册页)提到了 --acls 和 --xattrs 和 --selinux 选项,但在 GNU 网站的 tar 手册中没有提到它们

为什么?这是否意味着 Fedora 软件包与原始 gnu tar 不同?

fedora man tar gnu repository

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

GNU 模式匹配并替换准确数量的字符

这个问题可能已被列出,但我无法找到一个确切的命中。

我试图浏览一个文件,匹配一个模式并用其他东西替换它。但是,还有其他模式出现,但我只需要替换那些长度为 17 个字符的模式。

例子:

内容:

dlkfhfd|fedfe|dfwe3f347fde|3745978|dlkfhr**|376663781736102|**fedfe|dfwe3f347fde
Run Code Online (Sandbox Code Playgroud)

期待:

dlkfhfd|fedfe|dfwe3f347fde|3745978|dlkfhr**|37xxxxxxxxxxxxx|**fedfe|dfwe3f347fde
Run Code Online (Sandbox Code Playgroud)

进展:我能够将表达式与正则表达式模式匹配: **\|37[0-9]{13}\|**

但是,如果我将它放在 . 中sed,它只会替换文件中的所有内容。

sed -e s/\|37[0-9]{13}\|/\|37xxxxxxxxxxxxx\|/g
Run Code Online (Sandbox Code Playgroud)

我的 sed 版本是 4.2.2

linux sed gnu regular-expression wildcards

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

Linux 内核是否有任何成功的分叉或重构?

谷歌搜索揭示了这个 slashdot 故事产生了这个自 2016 年以来没有提交过的 github 存储库。有关于github.com上市22602个叉,但这些都将是主要(如果不是几乎所有的),只是为发展叉托沃兹/ Linux的

我之前读过 Linux 已经变得相当笨拙。在我看来,至少在用户体验方面,Linux 比我记忆中的 10 多年前更加精致(显然这不是对内核的准确评估;我现在才阅读 K&R,从未涉足内核源代码,除了粗略一瞥会产生“哇,我无法理解这一行”,但我知道内核中有关 linux-on-the-laptop 功能的大量开发,例如) . 无论如何,我知道我已经看到 BSD 人抱怨 Linux cruft。考虑到基于 vim cruft 的 vim 的 neovim 分支,我认为类似的努力会对内核有所回报。

提示这个问题的是LWN 上的这篇文章,讨论了使用 clang 编译 Linux 的尝试。我读到内核使用了许多特定于 gcc 的怪癖/特殊功能进行优化(尽管与我的记忆相比,链接的文章似乎淡化了它们),我开始怀疑是否有人试图重构/分叉内核来制作它更便携,或者至少可以在 gnu 环境之外编译。我也明白 gcc 本身很粗鲁,Linus 自己也批评过。

我知道我个人对 RMS 和 GNU 的厌恶以及对没有 GNU 的 Linux 的兴趣并不孤单;我知道Alpine Linux不需要 gnu 工具,但内核仍然是用 gcc 编译的,不是吗?有很多关于替代工具链和用户空间软件的参考,但我特别想知道内核以及是否有消除 gcc/gnu 依赖的分叉——认为这是标题的一个附属问题——在我看来这将是一个废物单独问吧。

gcc gnu linux-kernel clang

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

GNU coreutils 和 GNU Bash

我对 GNU coreutils 和 GNU Bash 感到困惑,

我已经安装了Bash GNU 项目 - 自由软件基金会
我应该安装Coreutils - GNU 核心实用程序吗

我怎样才能区分它们?

osx bash gnu

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

grep 一切直到并包括模式

假设我有一个包含异常的日志文件,如图所示

java.lang.NullPointerException blabla
ABC.Exception blalabbla
dogchacecat.Exception yadayada
Run Code Online (Sandbox Code Playgroud)

我希望能够从头到尾输出每一行直到(包括)“异常”

所需的输出:

java.lang.NullPointerException
ABC.Exception
dogchacecat.Exception
Run Code Online (Sandbox Code Playgroud)

如何使用任何 GNU 工具(grep、awk、sed)执行此操作?谢谢!

grep sed gnu awk

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

Makefile 获取目标列表

我使用下面的代码来获得makefile targets list在大多数情况下都可以正常工作的代码,但是当您像这样使用 makefile 时,您只会获得两个目标,而不是全部。

另一个命令不显示

Makefile

command: ## Command description
    @echo "Execution log"

another-command: ## Command description
    @echo "Execution log"

command2: ## Command description
    @echo "Execution log" 
Run Code Online (Sandbox Code Playgroud)

输出是:

command
command2
Run Code Online (Sandbox Code Playgroud)

我不明白为什么我没有收到命令another-command,这是代码

`make -qp | awk -F':' '/^[a-zA-Z0-9][^$#\\\/t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}' `;
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢 ?

我用这个作为参考 如何列出make中的所有目标?

在此输入图像描述

linux shell make gnu regular-expression

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

GNU find -not 和 GNU find -prune -o -print 之间的区别

关于在 vim 中打开除 [condition] 之外的所有文件的答案:

https://unix.stackexchange.com/a/149356/98426

给出了类似的答案:

find . \( -name '.?*' -prune \) -o -type f -print

(我修改了答案,因为我在这里的问题与 vim 无关)

其中否定条件位于转义括号中。但是,在我的测试文件中,以下内容

find . -type f -not -name '^.*'

产生相同的结果,但更易于读写。-not 方法与 -prune 方法一样,会修剪任何以 . (点)。我想知道 -not 和 -prune -o -print 方法会产生不同结果的边缘情况是什么。

Findutils 的信息页面如下:

-not expr : 如果 expr 为假则为真

-prune:如果文件是目录,则不下降到其中。(并进一步说明需要 -o -print 才能实际排除顶级匹配目录)

他们似乎很难以这种方式进行比较,因为 -not 是一个测试,而 -prune 是一个动作,但对我来说,它们是可以互换的(只要 -o -print 出现在 -prune 之后)

find gnu dot-files file-search syntax

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

尽管`grep -L x <<<x` 返回1,为什么`grep -L x <<<x >/dev/null` 返回0?

我有 GNU grep 3.3-1(Debian Buster 中的当前版本)。

来自man grep

退出状态

通常,如果选择了一行,退出状态为 0,如果没有选择任何行,则退出状态为 1,如果发生错误,则退出状态为 2。但是,如果使用-qor--quiet--silent选择了一行,即使发生错误,退出状态也是 0。

这与POSIX一致。(-L此处未指定。)

最新版本的完整文档最新提交中的文档没有关于-L( --files-without-match) 的更多详细信息。

grep -L x <<<x(in bash) 以代码 1 退出。我不确定这是否与文档一致(这里选择的行到底是什么?),但至少这是可以解释的:没有输入文件符合必须没有x.

grep -Lq x <<<x并且grep -L x <<<x >/dev/null都以代码 0 退出。好吧,-q稍微好理解一点,但是为什么 stdout 重定向会影响退出代码?因此,要在抑制输出的同时获得原始退出代码行为,(set -o pipefail; /bin/grep -L x <<<x | cat >/dev/null)需要进行类似的 hack 。这是为什么? …

linux grep gnu

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

Mapfile 不删除尾随换行符

  • 示例数据:制表符分隔的 tsv 文件
a.1.58  fadado/CSV  https://github.com/fadado/CSV
a.1.63  jehiah/json2csv https://github.com/jehiah/json2csv
a.1.80  stedolan/jq https://github.com/stedolan/jq/issues/370
Run Code Online (Sandbox Code Playgroud)
  • 以下使用 fzf 选择一条记录,并将第 2 和第 3 列存储到数组 Link:
mapfile -d $'\t' -t Link < <(awk 'BEGIN{FS="\t"; OFS="\t"} {print $2,$3}' "${SessionP}" | fzf)
Run Code Online (Sandbox Code Playgroud)

问题

在上面的命令中,我使用-t了 mapfile 选项,但echo "${Link[1]}"打印了一个新的行尾!

为什么没有被淘汰?


参考

array gnu newlines fzf

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

标签 统计

gnu ×10

linux ×4

sed ×3

grep ×2

regular-expression ×2

array ×1

awk ×1

bash ×1

clang ×1

dot-files ×1

fedora ×1

file-search ×1

find ×1

fzf ×1

gcc ×1

linux-kernel ×1

make ×1

man ×1

newlines ×1

osx ×1

repository ×1

shell ×1

syntax ×1

tar ×1

wildcards ×1