我需要逐行读取文本文件,并且行不是恒定的,它可能会有所不同。例如
$ 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 行放在 shell 脚本中并使其自动化。
答案1
您可以使用read
命令逐行读取文件。例如:
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
该-f
选项告诉您从假定每行一个模式的位置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
。