テキストファイルを1行ずつ読み込む必要がありますが、行は一定ではなくさまざまです。例えば
$ cat file1.txt
syntax error at or near "?" at character 1
syntax error at or near "[" at character 1
syntax error at or near "," at character 1
syntax error at or near "desc" at character 1
syntax error at or near "describtion" at character 1 `
行を読み取った後は、自動的にgrepコマンドに渡され、結果セットを提供する必要があります。テキストファイルにキャプチャされた行数とエラー数は予測できないためです。すべてが自動的に行われるはずです。
$ find file1.txt | xargs grep 'syntax error at or near "?" at character 1' | tail -1
シェルスクリプトに2行、3行…n行を入れて自動化するにはどうすればよいですか?
答え1
read
コマンドを使用してファイルを 1 行ずつ読み取ることができます。たとえば、
while read -r line
do
[[ $line = 'syntax error at or near "?" at character 1' ]] && printf '%s\n' "$line"
done < file1.txt
答え2
grep
私が正しく理解したら、1号線で作業したいという意味です。Nただ。これを行うには、次のhead
ツールを使用できます。
head -n 20 your_file | grep ...
これにより、grep
最初の20行が実行されますyour_file
。 20を次に置き換えるNあなたと関係があります。
別の説明と回答
file1.txt
試してみたいパターンを含めたいという意味かもしれないと思いましたgrep
。もしそれこの場合は、次を-f
選択したいと思いますgrep
。
grep -f file1.txt files_you_want_to_search
このオプションは、投稿に示されているように、1-f
行に1つのパターンであると想定される場所からパターンを取得するように指示します。この場合、ファイルの正規表現メタ文字に特別な意味を持たず、文字通り解釈するオプションを追加することもできます。grep
file1.txt
-F
grep -Ff file1.txt files_you_want_to_search
答え3
さまざまなコメントのあなたの説明によると、grep-f
オプションを使用してファイルから直接パターンリストを読む必要があるようです。
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file
contains zero patterns, and therefore matches nothing. (-f is
specified by POSIX.)
-F
ファイルに正規表現パターンが含まれていない場合は、リテラル(「固定」)文字列として解釈されるように強制を追加できます。
grep -Ff file_of_lines file_to_search_for_those_lines
file_to_search_for_those_lines
結果は、の文字列と一致するすべての行のリストになりますfile_of_lines
。