使用 Grep 输出字符串

using Grep to output a string

当运行一个命令时,我得到一个输出图表的输出:

+---------+------------------------------------------------------+
| Key     | Value                                                |
+---------+------------------------------------------------------+
| Address | longstringofcharacters |
+---------+------------------------------------------------------+
| Name    | word1-word2-word3                              |
+---------+------------------------------------------------------+

我可以 grep Name 来获取包含单词 Name.

的行

我怎么grep只输出word1-word2-word3的字符串?

我试过grep '*-*-*',但没用。

借助 GNU grep,您可以使用基于 PCRE 正则表达式的解决方案,例如

grep -oP '^\h*\|\h*Name\h*\|\h*\K\S+' file

参见online demo and the regex demo

  • -o - 仅输出匹配项
  • P - 启用 PCRE 正则表达式引擎
  • ^ - 字符串开头
  • \h*\|\h* - | 字符,包含可选的水平空格
  • Name - 一句话Name
  • \h*\|\h* - | 字符,包含可选的水平空格
  • \K - 丢弃到目前为止匹配的文本的匹配重置运算符
  • \S+ - 一个或多个非空白字符。

使用 GNU awk:

awk -F'[|[:space:]]+' ' == "Name"{print }' file

将字段分隔符设置为匹配一个或多个 | 个字符或空格的 [|[:space:]]+ 正则表达式,检查第 2 组是否等于 Name 并获取字段 3。

任何awk(如果你需要提取像nonwhitespaces(-nonwhitespaces)+这样的字符串):

awk 'match([=12=], /[^ -]+(-[^ -]+)+/) { print substr([=12=], RSTART, RLENGTH) }' file

参见 this online demo

一个使用 awk 的简单解决方案是:

awk '/Name/{ print  }'

/Name/ 部分是 awk 如何“greps”的。 { print } 位表示打印第四个 space 分隔词。