如何命令grep不显示搜索的字符串?

Ana*_*Das 15 command-line scripts grep

我想打印文件中一行的一部分。整条线看起来像这样。

Path=fy2tbaj8.default-1404984419419
Run Code Online (Sandbox Code Playgroud)

我只想打印Path=. 我试过了grep Path filename | head -5。但它不起作用。它仍然显示整行。我怎样才能做到这一点?

Syl*_*eau 41

您可以使用grep并且只是grep

grep -oP "(?<=Path=).*" file
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

说明

来自man grep

   -o, --only-matching
          Print only the matched (non-empty) parts of a matching line,
          with each such part on a separate output line.
   -P, --perl-regexp
          Interpret PATTERN as a Perl compatible regular expression (PCRE)
Run Code Online (Sandbox Code Playgroud)

回顾后发 (?<=Path=)断言在字符串中的当前位置,什么是先于人物Path=。如果断言成功,引擎将匹配解析模式。

有关 Perl 5 正则表达式语法,请阅读Perl 正则表达式手册页


g_p*_*g_p 15

您可以cut为此使用命令。

grep Path filename |cut -c6-
Run Code Online (Sandbox Code Playgroud)

这里的-c6-选项表示从第 6 个字符到最后一个字符打印。


she*_*ter 7

awk解决方案是我会用什么,而是要推出一个略小的过程sed,它可以产生相同的结果,但通过与代线的PATH =部分"",即

  sed -n 's/^Path=//p' file
Run Code Online (Sandbox Code Playgroud)

-n覆盖sed的默认行为是“打印所有行”(so -n= 不打印),要打印一行,我们在替换p后添加字符。只会打印发生替换的行。

这为您提供了您所要求的行为,即greping 字符串,但删除了Path=该行的一部分。

如果根据 David Foerster 的评论,您有一个大文件并希望在匹配并打印第一个匹配到“Path=”后立即停止处理,您可以使用q命令告诉 sed 退出。请注意,您需要通过{ ..}将每个命令包围并用;. 所以增强的命令是

sed -n 's/^Path=//{p;q;}` file
Run Code Online (Sandbox Code Playgroud)

IHTH


Jan*_*Jan 5

grepgrep 一行文本并显示它。head显示前n行文本,而不是字符。

您正在寻找sedawk

awk '{print $2}' FS='='
Run Code Online (Sandbox Code Playgroud)

这将设置=为字段分隔符并打印第二个字段。


cuo*_*glm 5

使用 GNU grep:

$ echo Path=fy2tbaj8.default-1404984419419 | grep -oP '(Path=)\K.*'
fy2tbaj8.default-1404984419419
Run Code Online (Sandbox Code Playgroud)

\K保留 \K 左侧的内容,不要将其包含在$&.