使用 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 分隔词。
当运行一个命令时,我得到一个输出图表的输出:
+---------+------------------------------------------------------+
| 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 分隔词。