2048자를 초과하는 줄을 제거하는 방법에 대한 질문을 찾았습니다.
Q : 그러나 4 자보다 짧은 줄을 어떻게 제거 할 수 있습니까? 따라서 파일에서 길이가 1 또는 2 또는 3 인 줄을 제거하십시오.
업데이트 : 많은 GOOD 답변에 감사드립니다.하지만 하나만 OK로 표시 할 수 있습니다
2048자를 초과하는 줄을 제거하는 방법에 대한 질문을 찾았습니다.
Q : 그러나 4 자보다 짧은 줄을 어떻게 제거 할 수 있습니까? 따라서 파일에서 길이가 1 또는 2 또는 3 인 줄을 제거하십시오.
업데이트 : 많은 GOOD 답변에 감사드립니다.하지만 하나만 OK로 표시 할 수 있습니다
답변:
사용할 수 있습니다 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
다음은 Vim의 Ex 모드와 global
명령을 사용하는 Vim 솔루션 입니다.
이는을 사용하는 것과 매우 유사하며 sed
일부 특수 문자 ( '{', '}') 만 이스케이프해야합니다.
:g/^.\{,3\}$/d
Vim의 Very Magic Regex 모드 (\ 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 자까지 줄을 제외한 모든 것을 삭제합니다.
할 수있는 줄을 직접 제거하십시오.
sed -ri '/.{4}/!d' /path/to/file
또는 BRE :
sed -i '/.\{4\}/!d' /path/to/file
행에 4 개 이상의 문자가 포함되어 있지 않으면 삭제됩니다.
f=/path/to/file
cat <<GREP >"$f"
$(grep -E ".{4}" "$f")
GREP
명령 대체 서브 쉘에서 위의 작업을 수행하면 grep
cat이 쓰기를 시작하기 전에 읽기 디스크립터를 <<HEREDOC
확보 할 수 있지만 결과는 계속 스트리밍되어 인수 길이 오류가 발생하지 않습니다.
sed '/^.\{,3\}$/d'
BSD sed :에서는 작동하지 않습니다sed: 1: "/^.\{,3\}$/d": RE error: invalid repetition count(s)
. sed -r 버전은 구문 상 유효하지만 행을 제거하지는 않습니다.