按顺序打印由正则表达式匹配的每个字符串

时间:2016-05-22 09:53:30

标签: bash awk grep

在互联网上搜索了一个小时之后,我仍然无法使这个简单的任务正常工作:

过滤以下行

strawberries blueberries tastyapplepies are on the desk
apple banana pineapple guava applejuice quite delicious

tastyapplepies
apple pineapple applejuice

通过查找每个字段是否包含apple并使用grepawk等命令。

3 个答案:

答案 0 :(得分:2)

你需要这个:

awk '{c=0; for(i=1;i<=NF;i++) if($i~/apple/) printf "%s%s",(++c>1?OFS:""),$i; if (c) print ""}' file

尝试所有输入解决方案,其中apple出现在某些行但不是所有行的最后一个字段中,以及一行不包含apple的行,例如:

$ cat file
strawberries blueberries tastyapplepies are on the desk
apple banana pineapple guava applejuice quite delicious
here is a line without the target word
here is a line ending in apple

$ awk '{c=0; for(i=1;i<=NF;i++) if($i~/apple/) printf "%s%s",(++c>1?OFS:""),$i; if (c) print ""}' file
tastyapplepies
apple pineapple applejuice
apple

答案 1 :(得分:1)

awk '{for(i=1;i<=NF;i++){if($i~/apple/){if(i==NF){printf("%s", $i);} else {printf("%s ",$i);}}}print "";}' <input.txt>

答案 2 :(得分:0)

perl -anE'$,=" ";@a=grep/apple/,@F and say@a'