2011-09-07 5 views
7

grep을 stopwords-file과 함께 사용하여 다른 파일에서 일반적인 영어 단어를 걸러 내고 싶습니다. "somefile"파일에는 한 줄에 한 단어가 들어 있습니다. 이는 중지 단어의 단어 somefile 발생 여부를 검사하지만, I는 somefile의 단어 불용어 발생하면 그 반대, 즉 검사 할 :grep을 사용하여 불용어 파일의 단어를 필터링하십시오.

cat somefile | grep -v -f stopwords 

이러한 접근에 대한 문제이다.

어떻게 하시겠습니까? 다음

hello 
o 
orange 

중지 단어 포함 : 나는 somefile에서만 단어 "O"를 필터링 할

o 

하지

somefile에는 다음이 포함 안녕과 오렌지. 당신이 불용어 파일/tmp를/단어가 가정

grep -v -w -f stopwords somefile 

답변

14

내가 좀 더 그것에 대해 생각하고, 해결책을 발견 ...

은 전체 단어 일치하도록 grep-w 스위치를 사용 :

in 
the 

당신에 의해 그것에서 나오지 프로그램을 만들 수 있습니다

sed 's|^|s/\\<|; s|$|\\>/[CENSORED]/g;|' /tmp/words > /tmp/words.sed 

이 당신이 /tmp/words.sed 얻을 것이다 방법 : 다음

s/\<in\>/[CENSORED]/g; 
s/\<the\>/[CENSORED]/g; 

및 텍스트 파일 검열을 사용

sed -e -f /tmp/words.sed /input/file/to/filter.txt > /censored/output.txt 

-e는 확장 이해하기 sed는 필요하다 regexp는 인식에 필요합니다. 물론 원하는 경우 [censored]을 다른 문자열이나 빈 문자열로 변경할 수 있습니다.

이 솔루션은 많은 단어를 한 줄에 하나의 단어로 처리합니다.

+1

또는 'cat' 명령어를 피하는'grep -v -w -f stopwords somefile' – Matthias

+1

클린업 제안에 따라 답변을 변경했습니다. @Matthias –

5

:

관련 문제