Mais algumas escolhas. Salvei seu texto de exemplo em file
para simplificar.
-
grep
e PCREs:$ grep -oP '(GRAPE|FRUIT)=\K.*?(?=,)' file purple yes violet affirmative
Para colocá-los na mesma linha, basta analisar. Por exemplo
$ grep -oP '(GRAPE|FRUIT)=\K.*?(?=,)' | paste -d" " - - – purple yes violet affirmative
-
sed
$ sed 's/.*GRAPE=\([^,]*\).*FRUIT=\([^,]*\).*/ /' file purple yes violet affirmative
Ou com o GNU
sed
$ sed -r 's/.*GRAPE=([^,]*).*FRUIT=([^,]*).*/ /' file purple yes violet affirmative
-
Perl
$ perl -pne 's/.*GRAPE=([^,]*).*FRUIT=([^,]*).*/ /' file purple yes
Você pode notar que o acima é um pouco semelhante ao
sed
one :). Alternativamente:$ perl -lne '@f=(/(?:(?<=GRAPE=)|(?<=FRUIT=))(.+?),/g); print "@f"' file purple yes violet affirmative
Isso usa
,
como separador de campo e pesquisa todos os campos:$ perl -F, -lane '@r=grep(s/.+?=//, grep(/GRAPE|FRUIT/,@F)); print "@r"' file purple yes violet affirmative
Este é mais curto, mas adiciona um espaço inicial a cada linha:
$ perl -F, -lane 'print grep(s/.+?=/ /, grep(/GRAPE|FRUIT/,@F));' file purple yes violet affirmative