Answers:
您只关心输出,tr
可能对您有用:
che@nok ~ $ grep cpu /proc/cpuinfo | tr '\n' ';'
cpu family : 6;cpu MHz : 800.000;cpu cores : 2;cpuid level : 10;cpu family : 6;cpu MHz : 800.000;cpu cores : 2;cpuid level : 10;
echo $my_var | tr @ '\n' | grep blahblah
$my var
以保留空格和换行符,即echo "$my_var" | ...
。
agrep
亚利桑那大学的允许您设置定界符。它不是grep的替代品;它使用不同的算法(近似grep,可以匹配错误),并且具有不同的模式语法。但这是一个方便的工具。
不幸的是,我认为由于许可问题,有多个名为的类似项目agrep
,但它们并不完全兼容。但是我认为所有版本都允许您设置分隔符。
case $# in
0|1|2) cat >&2 <<EOF
Usage: $0 delimiterstring pattern files....
Behaves like grep -pdelimiterstring but on linux
DOES NOT SUPPORT MOST ARGUMENTS
unlike grep -p - leaves delimiterstring in output
NO -p just the delimeterstring
note: delimiterstring has to work in the sed command where the ${d} is
if you are going to use @ in the delimeter string, then the @'s
need to be replaced by someother character
EOF
exit 0
;;
3) mode=one ;;
*) mode=many ;;
esac
d="${1}"
p="${2}"
shift 2
while [ $# -gt 1 ]
do
sed "s@${d}@\x00@g" "${1}" | grep -z "${p}" - | (
case $mode in
many) sed -e "s@\x00@${d}@g" -e "s@^@${1}: @" ;;
*) sed -e "s@\x00@${d}@g" ;;
esac
)
shift
done
d="${1}"
而不仅仅是d="$1"
?(2)您需要扩展警告:如果此警告与多个文件一起使用,则如果任何文件名包含“ @”,您也会遇到问题。(3)(Nit选择)真正的“ grep”替换/仿真器也可以使用零文件参数。