Bash doesn't have an easy way to loop over input on a line by line basis. xargs and for loops still depend on IFS, which you certainly could reset. Or you could use each():

each() { 
	local line=""
	while read line; do
		eval "${@/\{\}/\"${line}\"}" # $@ =~ s/ {} / $line /
	done
}

That was updated for Rogan's comment on WhatAreShellsGoodFor and now handles spaces in filenames on input. So now you can do stuff like:

20990 ~> grep :0: /etc/passwd | grep -Eo '^[^:]+' | each echo rm -rf {}
rm -rf root
rm -rf sync
rm -rf shutdown
rm -rf halt
rm -rf operator