다음과 /path/
같은 형식의 파일이 있는 폴더가 있습니다 ..filetype
grep -v [string] [filename] > [filename copy].filetype
이 폴더의 모든 항목에 대해. 나는 cd /path.
루프를 설정하고 설정해야한다고 생각합니다. 저는 구문에 대해 잘 알지 못하며 아무 것도 엉망으로 만들고 싶지 않습니다. 다음과 같은 형식으로 작성하시겠습니까?
for [something] in *.filetype
do
grep -v [string] [filename] > "[filename].filetype"
done
??
도움이 된다면 내 파일이 특정 방식(예: 시간 또는 날짜 기준)으로 형식화되지 않았으므로 순서는 중요하지 않지만 파일 이름을 보존해야 합니다. 이것이 가능한지 확실하지 않습니다
미리 감사드리며, 머리가 아프시면 죄송합니다.
편집하다:**
내 말은 내 파일이 특별한 방식으로 구성되지 않았다는 것입니다.
답변1
넌 할 수있어:
(cd /path && grep -vFe 'string' -- /dev/null *.filetype) > result.filetype
추가하면 파일이 /dev/null
하나만 있는 경우에도 일치하는 줄 앞에 파일 경로가 붙습니다 *.filetype
. GNU 구현을 통해 grep
이 옵션을 사용할 수도 있습니다 -H
.
result.filetype
다른 파일은 현재 작업 디렉토리에 생성됩니다 . 패턴을 일치 /path
시키려면 내부에서 실행되지 않도록 해야 합니다 . 그렇지 않으면 무한 루프가 발생하여 결국 디스크가 가득 차게 될 수 있습니다.result.filetype
*.filetype
/path
재귀적으로 파일을 찾으려면 *.filetype
다음을 사용할 수 있습니다 find
.
(
cd /path &&
LC_ALL=C find . -name '*.filetype' -type f -exec \
grep -vFe 'string' -- /dev/null {} +
) > result.filetype
또는 GNU 구현을 사용하십시오 grep
.
(
cd /path &&
LC_ALL=C grep -r --include='*.filetype' -vFe 'string' .
) > result.filetype
(숨겨진 파일도 고려합니다.)
또는 다음과 같이 zsh
:
(cd /path && grep -vFe 'string' -- /dev/null **/*.filetype(.)) > result.filetype
답변2
이는 도움이 될 것입니다:
for f in *
do
grep -v [string] "$f" > "new_$f"
done