小编Meg*_*tal的帖子

使用grep仅显示比赛的一部分

我对是否可以在以下情况下使用单个grep命令感兴趣。

我有一个dhcpd.conf文件,其中定义了DHCP主机。给定主机名,我需要在dhcpd.conf文件中找到其MAC地址。我需要使用它来禁用其PXE引导配置,但这不是这个问题的一部分。

该文件的语法是统一的,但我仍然想使其更加简单。这是定义主机的方式:

    host client1 { hardware ethernet 12:23:34:56:78:89; fixed-address 192.168.1.11; filename "pxelinux.0"; }
    host client2 { hardware ethernet 23:34:45:56:67:78; fixed-address 192.168.1.12; filename "pxelinux.0"; }
    host client3 { hardware ethernet AB:CD:EF:01:23:45; fixed-address 192.168.1.13; filename "pxelinux.0"; }
    host client4 { hardware ethernet C1:CA:88:FA:F4:90; fixed-address 192.168.1.14; filename "pxelinux.0"; }
Run Code Online (Sandbox Code Playgroud)

我们假定所有配置仅占用一行,即使dhcpd.conf语法允许将选项分成几行也是如此。我们假设选项的顺序可能不同。

我想出了以下grep命令:

grep -o "^[^#]*host.*${DHCP_HOSTNAME}.*hardware ethernet.*..:..:..:..:..:..;" /etc/dhcp/dhcpd-hosts.conf
Run Code Online (Sandbox Code Playgroud)

应该忽略那些被注释的行,在令牌之间允许任意空格,并匹配直到MAC地址的末尾。当我运行它时,我得到如下代码:

host client1 { hardware ethernet 12:23:34:56:78:89;
Run Code Online (Sandbox Code Playgroud)

这很棒!但是关键是我只需要一个MAC地址,而没有前面的垃圾桶。现在我知道,使用另一个grep或cut或awk仅从此输出中剪切MAC地址将是微不足道的。但我想知道,是否有一种方法可以使用单个grep命令来获得最终结果,而不必将此输出通过管道传递到另一个过滤器中?显然,我不能忘记模式的开头,因为我想获得一个特定的主机名,因此匹配“ ..:..:..:..:..:..”将为我提供所有MAC地址。

再一次,我想要一个命令(不一定是grep),该命令仅从文件中切出正确的MAC地址。因此,我对那些说“ grep ... | grep ...”或“ grep ... | cut ...”等的解决方案不感兴趣。

当然,在实践中,如果我使用多个过滤器并将其通过管道传输,也不会发生任何不好的情况,我很好奇是否可以使用一个过滤器来解决。

我会将输出分配给变量。

unix linux shell grep gnu

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

二分结束时 git 告诉我合并基础不好 – 我现在该如何进展?

我遇到了主线 Linux 内核的问题,我想找到引入 git-bisect 的错误的提交,以通知作者他的更改引入了错误。

\n\n

我发现了一个好的和一个坏的提交并开始了二分。好的提交是那些还没有 bug 的提交,坏的提交是那些已经引入了 bug 的提交。Linus 树的最新拉取仍然存在该错误,因此我认为该错误尚未修复,因此我认为通知作者很重要。

\n\n

然而,当我进行二分并继续测试所有提交时(没有使用 \xe2\x80\x9egit bisect skip\xe2\x80\x9d 跳过提交,所有这些都被评估为好或坏) ,有一次 git 给我带来了以下消息,让我感到惊讶:

\n\n
The merge base 7089db84e356562f8ba737c29e472cc42d530dbc is bad.\nThis means the bug has been fixed between 7089db84e356562f8ba737c29e472cc42d530dbc and [02c3de1105228e367320e7fdeffbf511904f398c 6d04dfc8966019b8b0977b2cb942351f13d2b178 7aa7d608112baf63a0b1278955f9619427373807].\n
Run Code Online (Sandbox Code Playgroud)\n\n

Git 不允许我从这一点继续前进。我不明白这一点。我知道不同的分支经常被合并(特别是在 Linus 的树中),并且错误很可能是在侧分支中引入的,但即使是这样,我认为我应该能够识别引入错误的提交,即使如果那是合并提交。为什么在列出的提交之间该错误已被修复,而当我从最新的提交构建时仍然存在问题?

\n

git linux-kernel

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

避免在 Rust 库中重复同步和异步代码

我最近遇到了一个提供同步和异步接口的库。可以使用功能标志启用异步async,并且异步/同步函数通过编译器指令进行区分。

例如,同步函数如下所示:

#[cfg(not(feature = "async"))]
fn perform_query<A: ToSocketAddrs>(&self, payload: &[u8], addr: A) -> Result<Vec<u8>>
{
    // More than 100 lines of code with occasional calls to sync UdpSocket::send_to and recv.
}
Run Code Online (Sandbox Code Playgroud)

这就是异步函数的样子:

#[cfg(feature = "async")]
async fn perform_query<A: ToSocketAddrs>(&self, payload: &[u8], addr: A) -> Result<Vec<u8>>
{
    // More than 100 lines of code with occasional calls to async UdpSocket::send_to and recv.
    // Apart from 3-4 await lines, it does mostly the same thing as its sync counterpart.
} …
Run Code Online (Sandbox Code Playgroud)

asynchronous rust async-await

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

标签 统计

async-await ×1

asynchronous ×1

git ×1

gnu ×1

grep ×1

linux ×1

linux-kernel ×1

rust ×1

shell ×1

unix ×1