shell脚本实战(第2版)/人民邮电出版社 脚本32 改进grep

本文介绍了一个名为CGrep的自定义脚本工具,该工具能够实现文件内容的高亮显示,并提供上下文行数的配置选项。通过使用CGrep,用户可以在文件中搜索特定模式并突出显示匹配项,同时还能查看匹配项周围的上下文信息。
摘要由CSDN通过智能技术生成
context=0
esc=""
boldon="${esc}[1m"
boldoff="${esc}[22m"
sedscript="/tmp/cgrep.sed.$$"
tempout="/tmp/cgrep.$$"

function showmatches
{
	matches=0
	echo "s/$pattern/${boldon}$pattern${boldoff}/g">$sedscript
	for lineno in $(grep -n "$pattern" $1 | cut -d: -f1)
	do
		if [ $context -gt 0 ];then
			prev="$(($lineno - $context))"
			if [ $prev -lt 1 ];then
				prev="1"
			fi
			next="$(($lineno+$context))"
			if [ $matches -gt 0 ];then
				echo "${prev}i\\" >> $sedscript
				echo "-----" >> $sedscript
			fi
			echo "${prev},${next}p">>$sedscript
		else
			echo "${lineno}p">>$sedscript
		fi
		matches="$(($matches+1))"
	done
	if [ $matches -gt 0 ];then
		sed -n -f $sedscript $1 | uniq | more
	fi
}

if [ -z "$1" ];then
	echo "Usage:$0 [-c X] pattern {filename}">&2
	exit 0
fi
if [ "$1" = "-c" ];then
	context="$2"
	shift;shift
elif [ "$(echo $1 | cut -c1-2)"="-c"];then
	context="$(echo $1|cut -c3-)"
	shift
fi
pattern="$1";shift
if [ $# -gt 0 ];then
	for filename ;do
		echo "-------$filename---------"
		showmatches $filename
	done
else
cat - > $tempout
showmatches $tempout
fi
exit 0

运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值