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