줄을 읽고 패턴과 일치

줄을 읽고 패턴과 일치

나는 이것을 알아낼 수 없다. 파일의 각 줄을 보고 변수에 지정된 단어와 일치하는지 확인해야 합니다.

command 로 시작했는데 read그 이후에는 무엇을 사용해야 할지 모르겠습니다. 시도해 보았지만 grep잘못 사용하고 있을 수도 있습니다.

while read line; do 
  if [ $condition  ] ;then echo "ok" fi
done < file.txt

답변1

간단한 소개를 드리자면 저희가 하고 있는 일은 다음과 같습니다.

1행 : 파일을 변수로 읽을 때line

2행: 정규 표현식과 일치하고 $line"bird"라는 단어와 일치하면 해당 행을 에코합니다. 이 if 문에서 필요한 모든 작업을 수행하세요.

3행: while 루프가 끝나고 파일에 파이핑foo.text

#!/bin/bash
while read line; do
  if [[ $line =~ bird ]] ; then echo $line; fi
done <foo.text

"새"는 정규 표현식입니다. 이 방법으로 예를 들어 bird.*word같은 줄을 정규식과 일치시키는 것으로 바꿀 수 있습니다 .

다음과 같은 파일을 사용해 foo.text콘텐츠를 호출해 보세요.

my dog is brown
her cat is white
the bird is the word

답변2

더 쉬운 방법은 grep(또는 egrep)을 사용하는 것입니다.

grep bird file.txt

답변3

다음은 두 개의 인수(파일 이름 및 변수)를 전달하는 간단한 스크립트입니다... 아래에 하드코딩된 버전도 있습니다.

#!/bin/bash

[ $# -lt 2 ] && echo "wrong number of args" && exit 1
file=$1
var=$2
while read line; do
    if  echo "$line" | grep -q "$var"; then echo "ok"; fi
done < "$file"
exit 0

[user@myserver ~]$ myscript file.txt some_text

또는 파일(및 변수)을 인수로 전달하는 대신 하드코딩하려는 경우...

while read line; do
    if  echo "$line" | grep -q "some_text"; then echo "ok"; fi
done < file.txt

답변4

sed또 다른 옵션은 각 행에서 수행하려는 처리에 따라 다릅니다. sed그러나 이미 모든 라인에서 사용할 계획이 있는 경우에만 권장합니다.

sed -n '/regex/p' foo.text

나는 -n정상적인 출력을 억제하기 위해 sed의 옵션을 사용하고 있습니다. 이 명령을 사용하여 p일치하는 줄만 인쇄합니다.

편집 명령(처리를 의미함)과 결합할 수도 있습니다.

sed -n '/regex/{s/pattern/replacement/;p}' foo.text

각 행에 대해 아무것도 하고 싶지 않다면 동의합니다.고양이 스티비의 대답이것이 grep가장 깨끗하고 빠른 최고의 솔루션입니다.

grep regex foo.text

추가 Unix 명령이 필요한 처리를 수행하려면 (그리고 그런 경우에만) read.

관련 정보