#!/bin/sh # Filter lines of input with a shell predicate. # Usage: filter [varname (default: x)] predicate # Example: ls | filter '[ -d "$x" ] && expr "$x" : ".*[0-9]"' [ $# -gt 1 ] && var="$1" && shift || var=x sh -c "while IFS= read -r $var; do $@ >/dev/null && echo \"\$$var\" done" || true