2011-05-07 3 views
8

일치하는 패턴이있는 행을 제외한 모든 행을 제거하고 싶습니다.일치하는 패턴 행 모범 사례 (sed)를 제외한 모든 행 제거

sed -n 's/matchingpattern/matchingpattern/p' file.txt 

하지만 일치하는 패턴 자체에 패턴과 일치하는 이름을 바꿀 때문에 난 그냥 궁금 해서요 :

이것은 내가 그것을 한 방법이다. 여기 낭비처럼 보입니다.

더 좋은 방법이 있나요?

답변

36
sed '/pattern/!d' file.txt 

그러나 여기서는 grep을 다시 만들 예정입니다.

+6

예. 그러나 sed는 grep에없는이 멋진 깃발을 가지고 있습니다. sed -i '/ pattern /! d'파일 이름 보다 쉽습니다. grep 'pattern'filename> filename.tmp && mv filename.tmp filename – Geeklab

+0

경고 : 결과를 인쇄하지 않으려면 --quiet 플래그를 제공했습니다. 터미널에, 깨닫지 못하고 -i는 이미 그 자체로 달성합니다. 즉, 패턴과 일치하는 모든 라인이 삭제되었습니다. – EriF89

2

이 당신을 위해 작동 될 수 있습니다

sed -n '/matchingpattern/p' file.txt 

/.../이 경우 p 부착 작업을 가질 수있는 주소입니다.

2

sed를 사용하는 대신 복잡한 grep을 사용하십시오.

grep matching_pattern file 

이렇게하면 원하는 결과를 얻을 수 있습니다.

+0

+1 '올바른 도구'. 그러나 sed는 그 자리에서 파일을 수정할 수 있습니다. –

1

grep은 확실히 빠릅니다. 왜냐하면 훨씬 빠릅니다.

GREP을 사용하여 내가 함께 일하고 있어요 데이터 세트의 염색체 6에 대한 모든 게놈 시퀀스 데이터를 추출 :

$ time grep chr6 seq_file.in > temp.out 

real 0m11.902s 
user 0m9.564s 
sys 0m1.912s 

나오지도에 비해 :

$ time sed '/chr6/!d' seq_file.in > temp.out 

real 0m21.217s 
user 0m18.920s 
sys 0m1.860s 

가 나는 배와 ~ 같은 값마다 반복했다.