grep内容后模式
先谢谢您的帮助。
给定一个文件,例如:
potato: 1234 apple: 5678 potato: 5432 grape: 4567 banana: 5432 sushi: 56789
我想grep所有以“potato:”开头的行,但是只能input“Potato”后面的数字。 所以在上面的例子中,输出结果是:
1234 5432
谢谢
grep 'potato:' file.txt | sed 's/^.*: //'
要么
grep 'potato:' file.txt | cut -d\ -f2
要么
grep 'potato:' file.txt | awk '{print $2}'
要么
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
要么
awk '{if(/potato:/) print $2}' < file.txt
要么
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
或者使用正则expression式断言: grep -oP '(?<=potato: ).*' file.txt
sed -n 's/^potato:[[:space:]]*//p' file.txt
人们可以把Grep看作是一个受限制的Sed,或者把Sed看作一个普遍的Grep。 在这种情况下,Sed是一个很好的,轻量级的工具,可以做你想做的事情 – 当然,还有其他几种合理的方法可以做到。
这将打印每场比赛之后的所有内容,只在同一行:
perl -lne 'print $1 if /^potato:\s*(.*)/' file.txt
这将做同样的事情,除了它也将打印所有后续行:
perl -lne 'if ($found){print} elsif (/^potato:\s*(.*)/){print $1; $found++}' file.txt
这些命令行选项被使用:
-
-n
循环input文件的每一行 -
-l
在处理之前删除换行符,然后将其添加回来 -
-e
执行Perl代码