我想打印文件中一行的一部分。整条线看起来像这样。
Path=fy2tbaj8.default-1404984419419
我只想打印 之后的字符Path=
。我试过了grep Path filename | head -5
。但它不起作用。它仍然显示整条线。我怎样才能做到这一点?
我想打印文件中一行的一部分。整条线看起来像这样。
Path=fy2tbaj8.default-1404984419419
我只想打印 之后的字符Path=
。我试过了grep Path filename | head -5
。但它不起作用。它仍然显示整条线。我怎样才能做到这一点?
你可以使用
grep
并且只是grep
:解释:
来自
man grep
:lookbehind断言在字符串的当前位置,前面是characters 。如果断言成功,则引擎匹配解析模式。
(?<=Path=)
Path=
对于 Perl 5 正则表达式语法,请阅读Perl 正则表达式手册页。
您可以
cut
为此目的使用命令。这里
-c6-
的选项表示从第 6 个字符打印到最后一个字符。awk
解决方案是我会使用的,但是启动过程稍微小一点,sed
它可以产生相同的结果,但是通过将行的 PATH= 部分替换为""
,即-n
覆盖sed
的默认行为是“打印所有行”(因此-n
= 不打印),要打印一行,我们在替换后添加字符p
。只会打印发生替换的行。这为您提供了您所要求的行为,即
grep
输入一个字符串,但删除该Path=
行的一部分。如果根据 David Foerster 的评论,您有一个大文件并且希望在匹配并打印第一个匹配项到“Path=”后立即停止处理,您可以使用
q
命令告诉 sed 退出。{ ..}
请注意,您需要通过将每个命令包围并用 . 分隔来使其成为一个命令组;
。所以增强命令是IHTH
grep
greps 一行文本并显示它。head
显示前n行文本,而不是字符。您正在寻找
sed
或awk
:这设置
=
为字段分隔符并打印第二个字段。使用 GNU grep:
\K
保留 \K 左边的内容,不要将其包含在$&
.当然解决方案是使用
grep -Po
.为了完整起见,让我们添加一些其他解决方案:
与
cut
,设置分隔符=
:这可能有点冒险,但您也可以获取文件,以便
$Path
包含该值。测试
根据评论,查看如何
source
仅部分文件: