Znalazłem pytanie, jak usunąć linie dłuższe niż 2048 znaków:
Jak usunąć linię, jeśli jest dłuższa niż XY?
P: Ale jak mogę usunąć linie krótsze niż 4 znaki? Więc usuń wiersze o długości 1, 2 lub 3 w pliku.
AKTUALIZACJA: Dzięki za wiele DOBRYCH odpowiedzi, ale mogę zaznaczyć tylko jedną jako OK
text-processing
sed
evachrystyna
źródło
źródło
sed '/^.\{,3\}$/d'
nie działa z BSD sed:sed: 1: "/^.\{,3\}$/d": RE error: invalid repetition count(s)
. Wersja sed -r jest poprawna pod względem składniowym, ale nie usuwa wierszy.Kilka innych odmian:
lub
lub
lub
lub
lub GNU awk:
źródło
Oto rozwiązanie Vima z użyciem trybu Ex Vima i
global
polecenia.Jest to bardzo podobne do używania
sed
, tyle że niektóre specjalne znaki („{”, „}”) muszą zostać usunięte.Używając trybu Very Magic Regex Vima (\ v), można uniknąć tego ucieczki.
Zobacz także: pomoc magii
Czasami przydatne jest również odwrotne działanie
vglobal
.usunie wszystko oprócz wierszy do 3 znaków.
źródło
aby bezpośrednio usunąć linie, możesz:
Lub BRE:
Jeśli wiersz nie zawiera 4 lub więcej znaków, jest usuwany.
Wykonanie powyższego w podpowłoce zastępowania poleceń zapewni, że
grep
dostanie na nim deskryptor odczytu, zanim kot zacznie do niego pisać, ale<<HEREDOC
zapewni również, że wynik pozostanie przesyłany strumieniowo i nie spowoduje błędów długości argumentów.źródło
źródło
Możesz użyć
grep
:Jeśli policzysz początkowe spacje w długości linii:
Jeśli nie policzysz początkowych spacji w linii na linii:
źródło