shell脚本,根据字符串获取行号的

本文详细介绍了如何在Shell脚本中更有效地使用AWK和SED进行文本处理。通过实例展示了如何避免累赘的写法,采用更简洁的代码实现相同的功能。同时,解释了如何正确地在AWK中使用shell变量,以及SED在获取行号方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

awk中不能解析shell变量,建议做法是通过-v传递进去:

1
typeline=`cat $typepath | awk -v str="$typetmp" '/str/{print NR}'`

第一句之所以在awk中可以直接使用shell变量$line,是因为用的双引号。

 

从执行效率上来说,你的写法其实太过累赘,下面是改良版:

1
2
typetmp=`awk -F":" -v n=$line 'NR==n{print $1}' $paratmppath`
typeline=`sed -n '/'"$typetmp"'/=' $typepath`

这里用sed来获取行号。

第一句,cut能做的awk也能做,直接在一个awk里完成就行。

awk和sed本身就是直接对文件的处理,用不着先cat再通过管道传递过来处理。

"$typetmp"前面的单引号用于跟一开始的单引号凑成一对,关闭sed作用域回到shell环境中,使得shell可以解析此变量,然后重新用单引号再次进入sed作用域。等于将sed作用域从中间分割开了。

转载于:https://www.cnblogs.com/Ph-one/p/6370125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值