SHELL:对Linux “grep”的增强
在Linux的使用过程中,通过“grep”过滤某个文件中的数据是个很常见的操作。
有时候,你可能需要从grep匹配的位置开始,输出该文件余下的所有内容。
在grep的原生功能中,我没有找到类似的说明,也没有看到其他的Linux工具有对该需求做出实现(有可能有,但是我暂时没有找到)。
故而,这里编写了一个SHELL脚本实现了该功能。
脚本代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
[root@ora11g-single ~]# cat advance_grep.sh #----------------------- # This Script used for Advanced file grep. # Author: Adamhuan # Data: 2015.06.23 # Location: Wu'Han,CHINA #----------------------- file_name=$1 search_string=$2 output_file_name=$3 echo "File is: $file_name" echo "Search String is: $search_string" total_row_count=`cat $file_name | wc -l` first_search_row_number=`cat $file_name | grep -n "$search_string" | head -n 1 | cut -d : -f 1` grep_option_A_value=`echo "$total_row_count-$first_search_row_number+1" | bc` echo "Total Row size: $total_row_count" echo "First search record row number: $first_search_row_number" echo "----------------------" echo "Grep Option A value is: $grep_option_A_value" echo "==================================================" echo "File data" echo "Started: "`date` echo "==================================================" echo "$(cat $file_name | grep -A $grep_option_A_value "$search_string")" | tee $output_file_name echo "----------------------" echo "Ended: "`date` echo "Done." [root@ora11g-single ~]# |
执行效果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@ora11g-single ~]# sh advance_grep.sh "install.log" "ipw2200-firmware-3.1-4.el6.noarch" other.log File is: install.log Search String is: ipw2200-firmware-3.1-4.el6.noarch Total Row size: 941 First search record row number: 940 ---------------------- Grep Option A value is: 2 ================================================== File data Started: Mon Jun 22 21:47:32 PDT 2015 ================================================== Installing ipw2200-firmware-3.1-4.el6.noarch Installing rootfiles-8.1-6.1.el6.noarch *** FINISHED INSTALLING PACKAGES *** ---------------------- Ended: Mon Jun 22 21:47:32 PDT 2015 Done. [root@ora11g-single ~]# [root@ora11g-single ~]# cat other.log Installing ipw2200-firmware-3.1-4.el6.noarch Installing rootfiles-8.1-6.1.el6.noarch *** FINISHED INSTALLING PACKAGES *** [root@ora11g-single ~]# |
————————————————————————
Done。