쉘 스크립트에서 일정하지 않은 텍스트 파일을 한 줄씩 읽는 방법

쉘 스크립트에서 일정하지 않은 텍스트 파일을 한 줄씩 읽는 방법

텍스트 파일을 한 줄씩 읽어야 하는데 줄이 일정하지 않고 다양할 수 있습니다. 예를 들어

$ 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명령을 사용하여 파일을 한 줄씩 읽을 수 있습니다. 예를 들어:

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한 줄에 하나의 패턴이라고 가정되는 위치에서 패턴을 가져오도록 지시합니다 . 이 경우 파일의 정규식 메타 문자에 특별한 의미가 부여되지 않고 문자 그대로 해석되도록 옵션을 추가할 수도 있습니다.grepfile1.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.

관련 정보