
2048자를 초과하는 줄을 삭제하는 방법에 대한 질문을 찾았습니다.
묻다:그런데 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
결과가 스트리밍 상태로 유지되고 매개변수 길이 오류가 발생하지 않는 것도 보장됩니다.