gpt4 book ai didi

grep - 使用 grep 捕获操作系统名称

转载 作者:行者123 更新时间:2023-12-02 19:22:05 25 4
gpt4 key购买 nike

在使用 grep 时我可以这样做:

$ cat /etc/os-release|grep "NAME="
NAME="Ubuntu"
PRETTY_NAME="Ubuntu 14.04.3 LTS"

有没有办法获取名称的捕获组?例如,类似:

$ cat /etc/os-release|grep -P '^NAME="(.+)"$'
NAME="Ubuntu" # <-- how to just get 'Ubuntu' ?

我想一个选择是这样的?但这似乎有点矫枉过正:

$ cat /etc/os-release|grep -P '(?<=^NAME=")[^"]+'

enter image description here

最佳答案

/etc/os-release 被设计为可获取的。只需使用:

. /etc/os-release; echo "$NAME"

中的点。/etc/os-release 告诉 shell source 该文件。这意味着文件中的命令将像在当前 shell 中一样运行。

bashzshksh等中,我们可以使用source/etc/os-release 代替 。/etc/os-release.然而,source 关键字不是 POSIX 标准的一部分,因此不可移植。特别是,dash 不支持 source,并且 dash 是许多发行版上的默认 /bin/sh

采购与执行

我们还可以执行该文件:

sh /etc/os-release; echo "$NAME"

但是,这意味着 /etc/os-release 中的命令是在子进程中执行的,当子进程退出时,所有环境更改都会立即丢失。这意味着,在我们的过程中,变量NAME不会发生变化。这就是为什么在这种情况下,我们使用采购而不是执行。

关于grep - 使用 grep 捕获操作系统名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com