grep을 사용하여 파일에서 여러 줄 삭제

grep을 사용하여 파일에서 여러 줄 삭제

다음과 같은 여러 줄이 포함된 파일이 있습니다.

브랜드, 모델, 인치, 가격

dell       xps      13    9000     
macbook    pro      13    13000
asus       zenbook  13    10500

가격이 10,000을 초과하는 행을 삭제하고 싶습니다. grep을 사용할 수 있나요?

답변1

다음 명령을 사용하여 가격이 10000보다 큰 행을 가져올 수 있습니다.

$ grep -E '.* [0]*[1-9][0-9]{4,}$' file.txt 
macbook    pro      13    13000
asus       zenbook  13    10500

이 줄을 제거하려면 다음을 추가하십시오 -v.

$ grep -vE '.* [0]*[1-9][0-9]{4,}$' file.txt 
dell       xps      13    9000     
  • .*가격이 포함된 마지막 열 앞의 모든 문자와 일치합니다.

  • [1-9]가격의 첫 번째 숫자와 일치합니다

  • [0-9]{4,}$첫 번째 숫자 다음에 4개 이상의 숫자가 일치하므로 총 5개의 숫자가 있습니다. 즉 10000 이상을 의미합니다.

답변2

가능하지만 grep숫자 대신 문자열에 대해 작동하는 정규식을 사용합니다.

grep -v '[0-9]\{5\}$' input.txt

-v일치하는 줄을 삭제합니다. 이전 콘텐츠가 n번 반복되었음을 나타내는 [0-9]임의의 숫자와 일치합니다 \{n\}(이 예에서는 5번, 즉 10,000번 이상). $줄의 끝과 일치합니다.

awk숫자를 비교할 수 있으므로 작업에 더 적합합니다.

awk '$4<10000{print}' input.txt

또는 펄:

perl -ane 'print if $F[-1] < 10000' input.txt

답변3

예제 입력을 고려하면 다음과 같습니다.

$ cat /tmp/foo
dell       xps      13    9000
macbook    pro      13    13000
asus       zenbook  13    10500

awk를 사용할 수 있습니다.

$ awk '{ if ($4 <= 10000) print; }' /tmp/foo
dell       xps      13    9000

답변4

노력하다

cp input.txt original.txt
awk 'NR==1 || $4 < 10000 ' original.txt > input.txt

어디

  • 조건 NR==1은 헤더 행을 유지합니다.

관련 정보