Usuń linie zaczynające się od #

10

Jak usunąć linie zaczynające się od a #, biorąc pod uwagę, że po lewej i prawej stronie mogą znajdować się białe znaki #?

  # Master socket provides access to userdb information. It's typically
chris4000
źródło

Odpowiedzi:

13

To wydaje się działać, ale nie zastanawiałem się nad tym:

sed -e '/^[[:space:]]*#/d'
Ulrich Schwarz
źródło
10

Możesz grepdo tego użyć

grep -vh '^[[:space:]]*#' filename

Ponieważ, jak przypuszczam, usuwasz komentarze z jakiegoś pliku, możesz również rozważyć usunięcie pustych linii, co rozszerza powyższe do:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
źródło
3

awk rozwiązaniem jest odwrócenie pasujące do wzorca.

$> cat ./text
elephant
# Master socket provides access to userdb information. It's typically
zoo
 #ok
penguin
# !

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
źródło
4
Nie ma potrzeby, aby uciec znak spacji, nie ma potrzeby, aby uchwycić znak spacji, nie ma potrzeby, aby określić domyślne działanie: awk '!/^ *#/' ./text.
manatwork
awk '/^ *#/{next}1' filepowinno być wystarczająco dobre.
jaypal singh
0
perl -ne 'print if ! /^\s*#/' ./text
Peter John Acklam
źródło
cześć @ Peter-John-acklam, czy to zadziała, gdy po kodzie będzie # komentarz?
Nikhil Mulley
0

Korzystanie z przykładowych danych opublikowanych przez ДМИТРИЙ МАЛИКОВ ...

$ grep -vPh '^\s*#' filename.txt | grep -Po '\w+'
elephant
zoo
penguin

Wolę używać pcre z grep, więc używam przełącznika -P dla grep (musi to być GNU grep). Drugi grep to czysty cukier, który daje ci słowa bez białych znaków. Spowodowałoby to również „usunięcie” pustych linii.

Jim
źródło
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Zaid
źródło
To nie jest dobre - nie usuwa linii i usuwa linie takie jaka#b
Mat