如何对模式后的内容进行grep?

如何对模式后的内容进行grep?

例如,给定一个文件:

potato: 1234
apple: 5678
potato: 5432
grape: 4567
banana: 5432
sushi: 56789

我想为所有以potato:但只需列出下面的数字potato:..所以在上面的例子中,输出是:

1234
5432

我怎么能这么做?


慕工程0101907
浏览 399回答 3
3回答

米琪卡哇伊

grep&nbsp;'potato:'&nbsp;file.txt&nbsp;|&nbsp;sed&nbsp;'s/^.*:&nbsp;//'或grep&nbsp;'potato:'&nbsp;file.txt&nbsp;|&nbsp;cut&nbsp;-d\&nbsp;&nbsp;&nbsp;-f2或grep&nbsp;'potato:'&nbsp;file.txt&nbsp;|&nbsp;awk&nbsp;'{print&nbsp;$2}'或grep&nbsp;'potato:'&nbsp;file.txt&nbsp;|&nbsp;perl&nbsp;-e&nbsp;'for(<>){s/^.*:&nbsp;//;print}'或awk&nbsp;'{if(/potato:/)&nbsp;print&nbsp;$2}'&nbsp;<&nbsp;file.txt或perl&nbsp;-e&nbsp;'for(<>){/potato:/&nbsp;&&&nbsp;s/^.*:&nbsp;//&nbsp;&&&nbsp;print}'&nbsp;<&nbsp;file.txt

撒科打诨

sed&nbsp;-n&nbsp;'s/^potato:[[:space:]]*//p'&nbsp;file.txt人们可以认为grep是一个受限的SED,或者SED是一个广义的grep。在这种情况下,SED是一个很好的、轻量级的工具,可以做你想做的事情-当然,还有其他一些合理的方法来实现它。

慕无忌1623718

这将在每一次匹配之后打印所有内容,只在同一行上:perl&nbsp;-lne&nbsp;'print&nbsp;$1&nbsp;if&nbsp;/^potato:\s*(.*)/'&nbsp;file.txt这样做也是一样的,但也会打印后续的所有行:perl&nbsp;-lne&nbsp;'if&nbsp;($found){print}&nbsp;elsif&nbsp;(/^potato:\s*(.*)/){print&nbsp;$1;&nbsp;$found++}'&nbsp;file.txt使用以下命令行选项:-n在输入文件的每一行周围循环。-l在处理之前移除换行符,然后将它们添加回-e执行perl代码
打开App,查看更多内容
随时随地看视频慕课网APP