gpt4 book ai didi

bash - 如何grep单引号之间的所有内容?

转载 作者:行者123 更新时间:2023-12-05 08:17:17 24 4
gpt4 key购买 nike

我无法弄清楚如何 grep 两个单引号之间的字符。

我在一个文件里版本:'8.x-1.0-alpha1'

我喜欢这样的输出(版本号可以不同):

8.x-1.0-alpha1

我写了以下内容,但它不起作用:

cat myfile.txt | grep -e '版本' | sed 's/.*\?'\(.*?\)'.*//g'

感谢您的帮助。

添加:我使用了 sed 命令 sed -n "s#version:\s*'\(.*\)'#\1#p"我还想删除 8.x-,我将其编辑为 sed -n "s#version:\s*'8.x-\(.*\)'#\1#p"

此命令仅适用于linux,不适用于MAC。如何更改此命令以使其在 MAC 上工作?

sed -n "s#version:\s*'8.x-\(.*\)'#\1#p"

最佳答案

如果您只想从文件中获取该信息,并且您可以快速做到这一点:

awk -F"'" '/version/{print $2}' file

例子:

$ echo "version: '8.x-1.0-alpha1'" | awk -F"'" '/version/{print $2}'
8.x-1.0-alpha1

这是如何运作的?

awk 程序是一系列模式- Action 对,写为:

condition { action }
condition { action }
...

condition 通常是一个表达式,action 是一系列命令。

  1. -F "'": 这里我们告诉 将字段分隔符 FS 定义为 '。这意味着所有行将拆分为字段 $1, $2, ... , $NF 并且在每个字段之间有一个 '。我们现在可以通过对第一个字段使用 $1 来引用这些字段,对第二个字段使用 $2 ... 等等,直到 $NF where NF 是每行的字段总数。

  2. /version/{print $2}:这是条件- Action 对。

    • 条件:/version/::条件为:如果当前记录/行中的子字符串匹配正则表达式/version/然后执行action。在这里,如果当前行包含子字符串 version

    • ,则简单翻译为
    • action: {print $2}::如果满足前面的条件,则打印第二个字段。在这种情况下,第二个字段将是 OP 请求的内容。

现在可以做几件事。

  1. condition 改进为 /^version :/&& NF==3 读取 _If the current line start with the substring version : and 当前行有 3 个字段然后执行 action

  2. 如果您只想要第一次出现,您可以通过将操作更新为 {print $2; 来告诉系统在找到后立即退出退出

关于bash - 如何grep单引号之间的所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52723293/

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