我想打印文件中某一行的一部分。整行如下所示。
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
-n
p
这为您提供了您所要求的行为,即grep
获取字符串,但删除Path=
该行的一部分。
如果按照 David Foerster 的评论,您有一个大文件,并且希望在匹配并打印出第一个匹配项“Path=”后立即停止处理,则可以使用命令告诉 sed 退出q
。请注意,您需要将其变成命令组,方法是将两个命令括在内{ ..}
,并用 分隔每个命令;
。因此,增强的命令是
sed -n 's/^Path=//{p;q;}` file
免疫学和免疫学研究所
答案4
grep
greps 一行文本并显示它。head
显示第一个n文本行,而不是字符。
您正在寻找sed
或awk
:
awk '{print $2}' FS='='
这将设置=
为字段分隔符并打印第二个字段。