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