0

やりたいことを実行するためのスクリプトを取得するのに問題があります。

ファイルでパターンを検索し、そのパターンの行番号とインスタンスを出力するスクリプトがあります。

見つかった行を印刷する前に、最初にファイル名を印刷する方法を知りたい

また、これを呼び出して 2 つの引数を渡す新しいスクリプトを作成する方法も知りたいです。

最初の引数は grep のパターンで、2 番目の引数は場所です。

場所がディレクトリの場合、ループし、スクリプトを使用してディレクトリ内のすべてのファイルのパターンを検索します。

#!/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

grep2 番目の引数がディレクトリであることをテストし、そのディレクトリのすべてのファイルを反復するため-rに使用することを回避するのに役立つオプションがあります。for loop

ページからman:

-R, -r, --recursive リストされたサブディレクトリを再帰的に検索します。

ファイル名も出力されます。

テスト:

1 つのファイル:

[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 に答える