![Grep 일치 및 루프 디렉터리와 다른 출력 파일에 저장](https://linux55.com/image/154082/Grep%20%EC%9D%BC%EC%B9%98%20%EB%B0%8F%20%EB%A3%A8%ED%94%84%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%99%80%20%EB%8B%A4%EB%A5%B8%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%A0%80%EC%9E%A5.png)
다음과 같이 3개의 파일이 있습니다.
1.out
a
b
c
2.out
g
h
abcd
a
h
3.out
b
c
e
a
위 줄과 아래 줄을 일치시키고 새 해당 파일에 저장하려면 파일에 "a" 패턴이 필요합니다.
for file in *.out;do grep -A 1 -B 1 'a' $file > $file_output.txt; done
답변1
_
(밑줄)은 변수 이름에 유효한 문자입니다.
이는 $file_output.txt
변수를 사용 하고 해당 값에 file_output
문자열을 추가하는 것을 의미합니다. .txt
변수가 존재하지 않으면 이제 이름이 변수입니다 .txt
.
변수 이름이 앞에서 끝나는 것을 쉘에 알리려면 _
이름 주위에 중괄호를 사용하십시오.
"${file}_output.txt"
file 1.out
또한 변수 확장은 따옴표로 묶여 있습니다( 현재 디렉토리의 파일 이름에 공백( ) 또는 파일 이름 와일드카드(또는 유사한 문자)가 포함된 경우 [123].out
필요함 *.out
).
최종 루프:
for file in *.out; do
grep -A 1 -B 1 'a' "$file" >"${file}_output.txt"
done