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