如何逐行读取shell脚本中不恒定的文本文件

如何逐行读取shell脚本中不恒定的文本文件

我需要逐行读取文本文件,并且行不是恒定的,它可能会有所不同。例如

$ 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

相关内容