0

我无法让脚本做我想做的事。

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

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

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

第一个参数是 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”来循环命令,但究竟如何不适合我。

4

2 回答 2

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.
于 2013-06-20T21:29:13.940 回答
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
于 2013-06-20T21:49:37.070 回答