Löschen Sie Zeilen, die mit # beginnen

10

Wie lösche ich Zeilen, die mit a beginnen #, da links und rechts von Leerzeichen Leerzeichen stehen können #?

  # Master socket provides access to userdb information. It's typically
chris4000
quelle

Antworten:

13

Das scheint zu funktionieren, aber ich habe nicht tief darüber nachgedacht:

sed -e '/^[[:space:]]*#/d'
Ulrich Schwarz
quelle
10

Sie können verwendet werden grepfür die

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

Da Sie, wie ich vermute, Kommentare aus einer Datei entfernen, können Sie auch Leerzeilen entfernen, wodurch Folgendes erweitert wird:

grep -vh '^[[:space:]]*\(#\|$\)' filename
rozcietrzewiacz
quelle
3

awk Die Lösung besteht darin, die Übereinstimmung mit Ihrem Muster umzukehren.

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

$> awk '!/^(\ )*#/ {print $0}' ./text
elephant
zoo
penguin
ДМИТРИЙ МАЛИКОВ
quelle
4
Keine Notwendigkeit, dem Leerzeichen zu entkommen, keine Notwendigkeit, das Leerzeichen zu erfassen, keine Notwendigkeit, die Standardaktion anzugeben : awk '!/^ *#/' ./text.
Manatwork
awk '/^ *#/{next}1' filesollte gut genug sein.
Jaypal Singh
0
perl -ne 'print if ! /^\s*#/' ./text
Peter John Acklam
quelle
hi @ Peter-john-acklam, würde das funktionieren, wenn auf den Code ein # Kommentar folgt?
Nikhil Mulley
0

Verwendung der von ДМИТРИЙ МАЛИКОВ ...

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

Ich bevorzuge die Verwendung von pcre mit grep, daher verwende ich den Schalter -P für grep (muss GNU grep sein). Der zweite Grep ist reiner Zucker, um Ihnen die Wörter ohne Leerzeichen zu geben. Es würde auch leere Zeilen "entfernen".

Jim
quelle
-1
$ perl -pi -e '$_="" if /^\s*#/' filename
Zaid
quelle
Das ist nicht gut - löscht keine Zeilen und löscht Zeilen wiea#b
Mat