내가 어떻게 사용할 수 있는 특정 문자열을 포함하는 텍스트 파일을 흐름선 삭제하시겠습니까 sed?
선을 지루려면 인쇄인쇄 표준 출력으로:
sed '/pattern to match/d' ./infile
직접 파일 수정 BSD sed 와 함께 사용할 수 없습니다.
sed -i '/pattern to match/d' ./infile
Sed (Mac OS X, FreeBSD) - 동일한 있으나, BSD, GNU sed 와 함께 사용할 수 없습니다.
sed -i '' '/pattern to match/d' ./infile
직접 수정하십시오 파일 (만들어 백업까지의 수행됨 BSD, GNU sed:
sed -i.bak '/pattern to match/d' ./infile
여러 가지 다른 방법을 통해 특정 문자열을 흐름선 삭제하시겠습니까 목동들과 'sed':
awk '!/pattern/' file > temp && mv temp file
ruby -i.bak -ne 'print if not /test/' file
perl -ni.bak -e "print unless /pattern/" file
while read -r line
do
[[ ! $line =~ pattern ]] && echo "$line"
done <file > o
mv o file
grep -v "pattern" file > temp && mv temp file
물론 'sed' () 는 인쇄 보색으로 보다 실제 삭제):
sed -n '/pattern/!p' file
'Ex' 사용하는 방법을 고려해 볼 수 있습니다 (이 은 표준 유닉스 명령 기반 editor):
ex +g/match/d -cwq file
여기서:
Posix 는 현재 위치 위의 예제 파일을 편집하는 방법을 따라 이 게시물을 어니스트세 및 POSIX 사양명세가 'ex'.
Sed (를) '차이' 는 다음과 같이 밝혔다:
>. 아닌 파일 '은' sed Strea EDito editor.< sup> 바시파크 < /sup>;;
경험하십시오 인자를 취하지 않으면 코드, I / O 오버헤드에 및 기타 일부 나쁜거라 부작용은요. 그래서 일부 매개변수입니다 기본적으로 (내부 / '등' -i ') 는 비표준 FreeBSD 확장장치 및 다른 운영 체제에서 사용할 수 없습니다.
[2]: http://vim.wikia.com/wiki/Power_of_g # 참조용이므로
난 내가 필요로 할 뿐만 아니라, 이 문제로 어려움을 겪고 있는 대체 가변적입니다 사용하여 Mac.
그래서 내가 사용합니다.
i & # 39, & # 39, sed ' / $ pattern/d" "; $ 파일 '
여기서 '및' $ $ 파일 '은 파일 삭제를 할 수 있는 요구되는가 패턴' 은 패턴 정합된 삭제용으로.
& # 39, & # 39 에서 꼽은 ',' 내가 이 [주석문입니다] [1].
, 큰따옴표 에서 사용할 수 있는 건 참고 슬라이드에서는 " / $ pattern/d" ','. # 39 won& 가변적입니다 때, 우리가 사용하는 작은 따옴표 빗나갔다.
[1]: https://stackoverflow.com/questions/5410757/delete-a-line-containing-a-specific-string-using-sed # comment28307642_5410784
난 작은 파일을 사용하여 약 345 예증의표적으로 벤치마트 포함된 000 이다. 운행에서어떠한 그렙 '을 (를)' 이 '' 이 경우, 약 15 배나 빠른 속도로 메서드로부터 일으킨 것으로 보인다.
나도 날잡아 설정 없이 모두 함께 LC_ALL = C, 타이밍 변경하십시오 크게 보이지 않는다. 문자열 검색 (CDGA_00004.pdbqt.gz.tar) 는 중간 중간에 절실해졌습니다.
다음은 명령 및 타이밍:
time sed -i "/CDGA_00004.pdbqt.gz.tar/d" /tmp/input.txt
real 0m0.711s
user 0m0.179s
sys 0m0.530s
time perl -ni -e 'print unless /CDGA_00004.pdbqt.gz.tar/' /tmp/input.txt
real 0m0.105s
user 0m0.088s
sys 0m0.016s
time (grep -v CDGA_00004.pdbqt.gz.tar /tmp/input.txt > /tmp/input.tmp; mv /tmp/input.tmp /tmp/input.txt )
real 0m0.046s
user 0m0.014s
sys 0m0.019s
SED:
AWK:
그렙:
[1]: http://sed.js.org/ = d9270c2789f1cc82a4898ad5a7297388 사진을? [2]: http://sed.js.org/ = 0b78ac2ebeb4dc884083329ab09445ce 사진을? [3]: http://awk.js.org/ = b2d6c62828b0daf29d7cf9be3c9e34f5 사진을? [4]: http://grep.js.org/ = ba9b48ebf847e88fcf060e00ff45203f 사진을?
혹시 누군가 wants to do it for 문장열 w '의 정확한 경기에 사용할 수 있습니다 - w 의 그렙 플래깅' 다. 즉, 예를 들어, 삭제할 수 있는 라인을 11khz, 시작하는 줄은 번호는 111 유지하고 있다.
-bash-4.1$ head file
1
11
111
-bash-4.1$ grep -v "11" file
1
-bash-4.1$ grep -w -v "11" file
1
111
또한 '-f' 가 정확한 플래깅 제외하려면 한 번에 여러 패턴. 만약 " blacklist"; 는 여러 패턴을 사용하여 파일 삭제 (delete from 보기할 각 줄의 file" ";:
grep -w -v -f blacklist file