XY보다 짧은 줄을 삭제하는 방법은 무엇입니까?

XY보다 짧은 줄을 삭제하는 방법은 무엇입니까?

2048자를 초과하는 줄을 삭제하는 방법에 대한 질문을 찾았습니다.

XY보다 긴 선을 삭제하는 방법은 무엇입니까?

묻다:그런데 4자보다 짧은 줄을 삭제하는 방법은 무엇입니까? 따라서 길이가 1, 2 또는 3인 행이 파일에서 삭제됩니다.

업데이트: 좋은 답변을 많이 해주셔서 감사합니다. 하지만 "확인"으로 표시할 수 있는 답변은 한 개뿐입니다.

답변1

다음 명령을 사용하면 sed길이가 3자 이하인 줄을 삭제할 수 있습니다.

sed -r '/^.{,3}$/d' filename

파일의 변경 사항을 저장하려면 이 -i옵션을 제공하세요.

귀하의 버전이 sed확장 RE 구문을 지원하지 않는 경우 BRE에 동일한 콘텐츠를 작성할 수 있습니다.

sed '/^.\{,3\}$/d' filename

이는 모든 sed변형에 적용됩니다.


다음을 사용할 수도 있습니다 awk.

awk 'length($0)>3' filename

사용 perl:

perl -lne 'length()>3 && print' filename

답변2

추가 변경사항:

grep .... file

또는

sed '/..../!d' file

또는

sed -n 's/./&/4p' file

또는

awk 'gsub(/./,"&")>3' file

또는

awk 'length>3' file

또는 GNU awk:

awk 'NF>3' FS= file

답변3

이것은 Vim의 Ex 모드와 명령을 사용하는 Vim 솔루션입니다 global.

sed이는 일부 특수 문자('{', '}')를 이스케이프해야 한다는 점을 제외 하면 를 사용하는 것과 매우 유사합니다 .

:g/^.\{,3\}$/d

Vim의 놀라운 정규식 패턴(\v)을 사용하면 이러한 탈출을 피할 수 있습니다.

:g/\v^.{,3}$/d

참조: 마법 도움말

Use of "\v" means that in the pattern after it all ASCII characters except
'0'-'9', 'a'-'z', 'A'-'Z' and '_' have a special meaning.  "very magic"

때로는 그 반대를 수행하는 것도 유용합니다 vglobal.

:v/\v^.{,3}$/d

줄을 제외한 모든 내용이 제거됩니다(최대 3자).

답변4

이러한 행을 직접 삭제하려면 다음을 수행하세요.

sed -ri '/.{4}/!d' /path/to/file

아니면 브레이:

sed -i '/.\{4\}/!d' /path/to/file

한 줄에 4자 이상이 포함되지 않으면 삭제됩니다.

f=/path/to/file
cat <<GREP >"$f"
    $(grep -E ".{4}" "$f")
GREP

명령 대체 서브셸에서 위 작업을 수행하면 grep쓰기를 시작하기 전에 cat의 읽기 설명자를 얻을 수 있지만 <<HEREDOC결과가 스트리밍 상태로 유지되고 매개변수 길이 오류가 발생하지 않는 것도 보장됩니다.

관련 정보