나는 쉘 스크립팅에 대한 경험이 많지 않지만 패턴을 grep하는 방법과 일치하는 각 파일에 대해 grep 일치 행이 포함된 파일을 디스크에 작성하는 방법을 이해하려고 노력하고 있습니다. 예를 들어:
$ grep -E "MY PATTERN" myfile{1,3}
그런 다음 일치하는 줄을 포함하는 새 파일을 작성합니다.
matches-myfile1
matches-myfile2
matches-myfile3
가능합니까? 어떻게 해야 하나요? 내가 찾고 있는 대답은 bash 또는 zsh입니다.
답변1
Bonsi는 올바른 아이디어를 가지고 있지만 올바른 접근 방식은 아닙니다(예: 공백이나 기타 공백 문자가 포함된 파일 이름을 처리하는 방법). 이를 수행하는 한 가지 방법은 다음과 같습니다 bash
.
for file in myfile{1,3}; do
grep -E "MY PATTERN" < "$file" > "matches-$file"
done
만약 너라면했다파일을 저장하려면 다음과 같이 단어 분할을 올바르게 고려해야 합니다.
files=( myfile{1,3} )
for file in "${files[@]}"; do
grep -E "MY PATTERN" < "$file" > "matches-$file"
done
답변2
awk를 사용하는 한 가지 방법:
awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}
답변3
나는 이것이 가능하다고 생각하지 않지만 이를 위한 작은 스크립트를 작성하는 것은 가능합니다.
#! /bin/bash
files=(file1 file2 file3)
for i in "${files[@]}"; do grep -E "MY PATTERN" < "$i" > matches-"$i"; done
답변4
grep
출력 파일 이름 을 사용한 -H
다음 awk
.
$ grep -H regexp files* | awk -F : '{ file="matches-" $1; sub("^[^:]+:","",$0); print $0 > file; }'