FILE
:
hello
world
foo
bar
Jak mogę usunąć wszystkie puste nowe wiersze z tego FILE
?
Wyjście polecenia:
FILE
:
hello
world
foo
bar
FILE
:
hello
world
foo
bar
Jak mogę usunąć wszystkie puste nowe wiersze z tego FILE
?
Wyjście polecenia:
FILE
:
hello
world
foo
bar
Odpowiedzi:
grep . FILE
(A jeśli naprawdę chcesz to zrobić w sed, a następnie: sed -e /^$/d FILE
)
(A jeśli naprawdę chcesz to zrobić w awk, a następnie: awk /./ FILE
)
sed -ne/./p
działa również i awk /./
jest krótszy (akcja jest {print}
nieokreślona). @ ghostdog74: grep '[^[:space:]]'
wtedy.
.
jest to wyrażenie regularne, które pasuje do dowolnego znaku poza znakiem nowej linii.
grep . FILE
działa z podanym przykładem, ale niekoniecznie, gdy plik może mieć bajty, które nie są częścią zestawu znaków. Na przykład w przypadku GNU grep 2.20 printf "\x80\n" | grep .
nic nie wyświetla.
Spróbuj wykonać następujące czynności:
grep -v -e '^$'
grep -v -e '^$'
zawsze działa, co nie ma miejsca grep .
. Na przykład w przypadku GNU grep 2.20 printf "\x80\n" | grep .
nic nie wyświetla, natomiast printf "\x80\n" | grep -v '^$'
wyświetla niepustą linię.
with awk, just check for number of fields. no need regex
$ more file
hello
world
foo
bar
$ awk 'NF' file
hello
world
foo
bar
awk1line.txt
- z drugiej strony, podobnie jak większość sztuczek awk :)
Oto rozwiązanie, które usuwa wszystkie linie, które są puste lub zawierają tylko znaki spacji:
grep -v '^[[:space:]]*$' foo.txt
Spróbuj tego: sed -i '/^[ \t]*$/d' file-name
Spowoduje to usunięcie wszystkich pustych linii, które mają nie. odstępów (spacji lub tabulatorów), tj. (0 lub więcej) w pliku.
Uwaga: w nawiasie kwadratowym znajduje się „spacja”, po której następuje „\ t”.
Modyfikator -i
wymusi zapisanie zaktualizowanej zawartości z powrotem w pliku. Bez tej flagi możesz zobaczyć, że puste linie zostały usunięte na ekranie, ale nie będzie to miało wpływu na rzeczywisty plik.
grep '^..' my_file
przykład
THIS
IS
THE
FILE
EOF_MYFILE
jako wyjście podaje tylko wiersze z przynajmniej 2 znakami.
THIS
IS
THE
FILE
EOF_MYFILE
Zobacz także wyniki z grep '^' my_file
produktami
THIS
IS
THE
FILE
EOF_MYFILE
a także z grep '^.' my_file
wyjściami
THIS
IS
THE
FILE
EOF_MYFILE
Jeśli usunięcie pustych linii oznacza linie zawierające spacje, użyj:
grep '\S' FILE
Na przykład:
$ printf "line1\n\nline2\n \nline3\n\t\nline4\n" > FILE
$ cat -v FILE
line1
line2
line3
line4
$ grep '\S' FILE
line1
line2
line3
line4
$ grep . FILE
line1
line2
line3
line4
Zobacz też:
Perl może być przesadą, ale działa równie dobrze.
Usuwa wszystkie wiersze, które są całkowicie puste:
perl -ne 'print if /./' file
Usuwa wszystkie linie, które są całkowicie puste lub zawierają tylko spacje:
perl -ne 'print if ! /^\s*$/' file
Odmiana, która edytuje oryginał i tworzy plik .bak:
perl -i.bak -ne 'print if ! /^\s*$/' file
Jeśli chcesz wiedzieć, jaka jest całkowita liczba wierszy kodu w twoim projekcie Xcode i nie jesteś zainteresowany wyświetlaniem liczby dla każdego pliku Swift, to da ci odpowiedź. Usuwa wiersze bez kodu i usuwa wiersze poprzedzone komentarzem//
Uruchom go na poziomie głównym projektu Xcode.
find . \( -iname \*.swift \) -exec grep -v '^[[:space:]]*$' \+ | grep -v -e '//' | wc -l
Jeśli masz w kodzie bloki komentarzy zaczynające się /*
i kończące */
na:
/*
This is an comment block
*/
wtedy te zostaną uwzględnione w liczbie. (Zbyt trudne).
Najprostsza odpowiedź -----------------------------------------
[root@node1 ~]# cat /etc/sudoers | grep -v -e ^# -e ^$
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
[root@node1 ~]#