두 개의 검색어를 grep

두 개의 검색어를 grep

다음을 사용하여 여러 파일에서 두 개의 특정 단어가 포함된 줄을 검색할 수 있습니다.

for f in $(ls *.txt); do
  echo ">"$f; more $f | grep word1 | grep word2
done

이제 전체 내용을 반복해서 다시 입력할 필요가 없도록 이 작업을 수행하는 쉘 스크립트를 작성하고 싶습니다. 검색 시 한두 단어를 사용할 수 있는 옵션도 추가하고 싶습니다. 검색된 단어를 명령줄의 쉘 스크립트에 전달하겠습니다. 나는 다음 쉘 스크립트 searchwords.sh를 작성했습니다.

word1=$1
word2=$2
for f in $(ls *.txt); do
echo ">"$f
###if word2 is empty; then execute 
if [-z $word2]; then
        more $f | grep $word1
else
###if word2 is not empty
        more $f | grep $word1 | grep $word2
fi
done

용법:

sh searchwords.sh word1 word2

원하는 결과를 얻었지만 오류 출력도 나타납니다.

[-z: not found

내 코드가 올바르지 않다는 것을 알고 있지만 배치할 수 없습니다.

답변1

스크립트에 몇 가지 오류가 있습니다.

  • 누락된 공간[-z $word2]
  • 변수에 큰따옴표가 없습니다.
  • 쓸모없는 사용more | grep
  • 구문 분석된 출력이 ls손상되었습니다.
  • grep$word1$word2대시로 시작 하거나 시작하면 실패합니다.-

수정 사항은 다음과 같습니다.

word1=$1
word2=$2

for f in ./*.txt; do
  printf '>%s\n' "$f"

  ###if word2 is empty; then execute 
  if [ -z "$word2" ]; then
    grep -- "$word1" "$f"
  else
  ###if word2 is not empty
    grep -- "$word1" "$f" | grep -- "$word2"
  fi
done

관련 정보