도트가 포함되지 않은 파일에서 줄을 삭제하는 방법은 무엇입니까?


10

URL을 포함한 데이터가 포함 된 파일이 있습니다. 그러나 URL이 아닌 다양한 줄이 있습니다. Ubuntu 터미널 명령을 사용하여 어떻게 제거 할 수 있습니까?

다음은 참조 용 샘플 파일입니다. 샘플 데이터

com.blendtuts/S
°=
com.blengineering.www/:http
±=

출력을 원합니다.

com.blendtuts/S
com.blengineering.www/:http

불필요한 원치 않는 선에는 점이 없습니다. 따라서 점이없는 선을 제거하고 싶습니다.

답변:


30

편도 sed

sed '/\./!d' file
  • /\./리터럴 도트와 일치 (다른 문자와 일치 \하므로 이스케이프 처리 .)
  • !d 일치하는 패턴을 제외한 모든 것을 삭제

파일을 제자리에서 편집하려면 -i테스트 후 명령에 추가하십시오 . (당신은 또한 추가 할 수 있습니다 .bak받는 -i플래그 sed -i.bak ...파일의 로컬 백업을 만들 수 있습니다.)

sed -i '/\./!d' file

26

점이있는 모든 것을 새 파일에 넣을 수 있습니다.

grep "\."  file > newfile

이렇게하면 이전 파일을 저장할 수 있습니다.


10

또는 점이 포함 된 선을 유지하십시오 .

sed -ni.bak '/\./p' infile

8

내가 생각하는 awk파티에없는 마지막 하나입니다 :

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

필드 구분 기호를 점으로 설정합니다. 그런 다음 두 개 이상의 필드가있는 선을 인쇄해야합니다. 이는 하나 이상의 점이 발생 함을 의미합니다.


3
더 간단한 awk 솔루션은 grep과 같은 방식으로 수행하는 것입니다. awk '/\./' file즉, 문자 '.'를 포함하는 행만 인쇄하는 것입니다.
Chris Midgley

@ChrisMidgley 좋은 하나! 이것이 grep이미 제안 된 답변이므로 , 나는 awk특정 물건을 선호합니다 :)
fedorqui

6

펄 사용하기 :

perl -i -ne 'print if /\./' /path/to/file

6

vim을 사용하면이 작업을 쉽게 수행 할 수 있습니다. vim을 텍스트 편집기 (파일 열기, 편집 및 쓰기)로 사용하는 것이 편한 경우 다음을 수행하십시오.

:g!/\./d

vim을 사용하는 것이 불편하거나 명령 줄 도구로 사용하려는 경우 터미널에서 간단히 수행 할 수 있습니다.

vim file -c "g!/\./d" -c "wq"

새 파일로 저장하기 위해 이것을 약간 수정할 수 있습니다.

vim file -c "g!/\./d" -c "w newfile" -c "q!"

이 명령은 vim의 "global"명령을 사용합니다.이 명령은 정규식과 일치하거나 일치하지 않는 모든 행에 ex 명령을 적용합니다. 이 경우 명령은 "(d) elete"이며 정규식과 일치하지 않는 모든 명령에 적용됩니다.\.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.