2009-11-19 8 views
1

디렉토리 트리의 여러 파일에서 행을 검색하고 삭제하는 방법은 무엇입니까? grepWin 및 Windows Grep과 같은 프로그램을 시도했지만 행을 대체하고 전체 행을 삭제하지 않습니다. 최선의 선택은 무엇입니까?여러 파일에서 행 삭제

예 : "hello"를 검색하고 "hello"가있는 행을 삭제하십시오.

yo 
hello hey hey 
hi hello 
bye 
bye 

는 작동 할 수 있습니다 다시

yo 
bye 
bye 
+0

언어를 지정하지 않았기 때문에 언어에 의존하지 않는 태깅. 언어가 중요 할 경우 언제든지 변경할 수 있습니다. – Mizipzor

+1

Windows 도구를 사용한 이후 Windows에서 태그 지정. 플랫폼이 실제 운영 체제 인 경우 언제든지 변경할 수 있습니다. –

답변

0

grepWin 또는 Windows Grep에서 방법을 찾았습니다.

정규식 검색 : ^. 안녕하세요. $ \ 연구 \ n은 정규식 교체 :

(공백 교체), 파일이, 다음을 수행해야 .foo의 확장이

0
 
perl -i.bak -ne 'print unless m/pattern/' file1 file2 file3 ... 
1
grep -R --revert-match 

와야한다. 일부 GNU grep 버전은 파일 마스크를 통한 재귀 검색을 지원하지만 Windows 포트에 대해서는 잘 모르겠습니다.

더 긴하지만 더 쉬운 방법, gfind은 GNU 예를, unxutils.sf.net를 들어,에서 찾을 수 있으며, deleteLine.bat 같은입니다

gfind . -name "*.txt" | xargs deleteLine.bat hello 

:

grep %1 --revert-match %2 > tempfile.### 
move tempfile.### %2 
1

이있는 경우 이 안녕과 행을 삭제합니다

cat test.txt | sed 's/.*hello.*//' 

하지만 빈 줄을 보여 Cygwin에서, 당신은 나오지도 사용할 수 있습니다. 당신이 blan 라인이 마음에 들지 않으면, 당신은 할 수 있습니다 :

cat test.txt | sed 's/.*hello.*//' | sed '/^$/d' 

편집 : TEST.TXT 파일입니다

sed '/.*hello.*/d' test.txt 

: 두번째 생각, 완전한 것은 간단하게 할 수 있습니다.

+0

이렇게하면 다른 모든 빈 줄도 지워집니다. 'cat '을 사용하지 않고 <로 파일을 sed로 파이프 할 수 있습니다. –

1

cygwin을 아직 설치하지 않았 으면 설치하는 것이 좋습니다. 이렇게하려면 다음과 같은 도구를 사용해야합니다.

당신은 나오지도 함께 라인을 삭제할 수 있습니다

sed -i '/pattern/d' filename... 

-i 옵션은 현재 위치에서 파일을 편집 나오지도 알려줍니다. -i.bak는 확장자가 .bak 인 백업 파일을 남깁니다.

디렉토리 트리의 모든 파일을 처리하려면 zsh에서 명령을 실행하는 것이 좋습니다. Zsh에는 bash와 비교하여 펑키 한 파일 확장 옵션이 있습니다.

sed -i '/pattern/d' **/*.(c|h) 

은 확장자가 .c 또는 .h 인 현재 디렉토리의 모든 파일에서 sed를 실행합니다. 루트 디렉토리에 위치 PowerShell로

1

:

foreach($file in (dir -r -i *.txt -force)) { $cleaned = gc $file | where { $_ -notlike "*Hello*" }; sc $file $cleaned } 

변경 * .txt 인 필터와 당신이 원하는에 "안녕하세요"일치 기준.

2

가정을 :

for /f %f in ('dir /s /b *.foo') do findstr /v hello %f > c:\temp\x && move /y c:\temp\x %f 

HTH를 - 르네