尝试将两个参数传递给调用脚本以进行模式搜索

时间:2013-06-20 21:27:30

标签: linux bash shell scripting

我无法让脚本完成我想要的操作。

我有一个脚本,可以在文件中搜索模式并打印该模式的行号和实例。

我想知道如何在打印找到的行之前先打印文件名

我也想知道如何编写一个新脚本来调用它并将两个参数传递给它。

第一个参数是grep的模式,第二个参数是位置。

如果该位置是目录,它将使用该脚本循环并搜索目录中所有文件的模式。

#!/bin/bash

if [[ $# -ne 2 ]]
then
  echo "error: must provide 2 arguments."
  exit -1
fi

if [[ ! -e $2 ]];
then
    echo "error: second argument must be a file."
    exit -2
fi

echo "------ File =" $2 "------"
grep -ne "$1" "$2"

这是我正在使用的脚本,我需要新的一个来调用。我在问一个类似的问题时得到了很多帮助,但我仍然有点失落。我知道我可以使用-d命令来测试目录,然后使用'for'来循环命令,但究竟是怎么没有为我平移。

2 个答案:

答案 0 :(得分:0)

我认为您只想将-H选项添加到grep:

   -H, --with-filename
          Print the file name for each match.  This is the default when there is more than one file to search.

答案 1 :(得分:0)

grep有一个选项-r,它可以帮助您避免测试第二个参数是一个目录,并使用for loop来迭代该目录的所有文件。

来自man页面:

  

-R,-r, - recursive                递归搜索列出的子目录。

它还会打印文件名。

测试:

在一个文件中:

[JS웃:~/Temp]$ grep -r '5' t
t:5 10 15
t:10 15 20

在目录上:

[JS웃:~/Temp]$ grep -r '5' perl/
perl//hello.pl:my $age=65;
perl//practice.pl:use  v5.10;
perl//practice.pl:@array = (1,2,3,4,5);
perl//temp/person5.pm:#person5.pm
perl//temp/person9.pm:   my @date    = (localtime)[3,4,5];
perl//text.file:This is line 5