egrep
텍스트로 가득 찬 폴더에서 여러 가지 다른 패턴을 실행하고 결과를 적절한 폴더에 출력하고 싶습니다 . 또한 이것은 제가 많이 사용할 워크플로우이기 때문에 간단하고 간결하게 유지하려고 노력했습니다.
그래서 텍스트로 가득 찬 폴더가 있고 docs
두 가지 다른 정규식 패턴(regex1 및 regex2)을 찾아 출력하고 싶습니다 docs/regex1
.docs/regex2
이런 게 효과가 있을 것 같아요
mkdir {docs/regex1,docs/regex2}
for file in docs/*
do
egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
done
이로 인해 오류가 발생합니다.
regex1/docs/001_regex1.txt: No such file or directory
regex2/docs/001_regex2.txt: No such file or directory
각 파일마다. regex1/docs로 이동하는 대신 docs/regex1로 이동하도록 출력을 어떻게 설정합니까?
답변1
예제 스크립트에는 다음이 있습니다.
egrep -o -f regex1 "$file" > regex1/"${file%.*}"_regex1.txt
egrep -o -f regex2 "$file" > regex2/"${file%.*}"_regex2.txt
그런데 당신은 이렇게 묻습니다.
각 파일마다. regex1/docs로 이동하는 대신 docs/regex1로 이동하도록 출력을 어떻게 설정합니까?
regex1
출력을 리디렉션할 경로의 시작 부분에 명시적으로 배치합니다 . 원하는 것과 일치하도록 이 문제를 수정한 다음 기본 경로를 제거하세요 $file
.
egrep -o -f regex1 "$file" > docs/regex1/"$( basename "${file%.*}" )"_regex1.txt
egrep -o -f regex2 "$file" > docs/regex2/"$( basename "${file%.*}" )"_regex2.txt