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

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

我想打印文件中某一行的一部分。整行如下所示。

Path=fy2tbaj8.default-1404984419419

我想只打印 之后的字符Path=。我试过了grep Path filename | head -5。但是不起作用。它仍然显示整行。我该怎么做?

答案1

您可以grep使用grep

grep -oP "(?<=Path=).*" file

在此处输入图片描述

解释

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)

向后看 (?<=Path=)断言在字符串的当前位置,前面是字符Path=。如果断言成功,则引擎匹配解析模式。

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

答案2

您可以使用cut命令来实现此目的。

grep Path filename |cut -c6-

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

答案3

解决方案awk是我会使用的,但启动一个稍微小一点的进程sed,它可以产生相同的结果,但通过用替换行的 PATH= 部分"",即

  sed -n 's/^Path=//p' file

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

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

如果按照 David Foerster 的评论,您有一个大文件,并且希望在匹配并打印出第一个匹配项“Path=”后立即停止处理,则可以使用命令告诉 sed 退出q。请注意,您需要将其变成命令组,方法是将两个命令括在内{ ..},并用 分隔每个命令;。因此,增强的命令是

sed -n 's/^Path=//{p;q;}` file

免疫学和免疫学研究所

答案4

grepgreps 一行文本并显示它。head显示第一个n文本行,而不是字符。

您正在寻找sedawk

awk '{print $2}' FS='='

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

相关内容