다음과 같이 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