Frage
Die folgende Anweisung entfernt Zeilennummern in einer TXT-Datei:
cat withLineNumbers.txt | sed 's/^.......//' >> withoutLineNumbers.txt
Die Eingabedatei wird mit der folgenden Anweisung erstellt (diese verstehe ich):
nl -ba input.txt >> withLineNumbers.txt
Ich kenne die Funktionalität von cat und ich weiß, dass die Ausgabe in die 'withoutLineNumbers' geschrieben wird.txt-Datei.Aber der Teil von '| sed 's/^.......//''
ist mir nicht wirklich klar.
Danke für Ihre Zeit.
Lösung
Dieser reguläre sed-Ausdruck entfernt einfach die ersten 7 Zeichen aus jeder Zeile.Der reguläre Ausdruck ^.......
sagt "Alle 7 Zeichen am Anfang der Zeile." Das sed-Argument s/^.......//
ersetzt den obigen regulären Ausdruck durch eine leere Zeichenfolge.
Beziehen Sie sich auf die sed(1)
man-Seite für weitere Informationen.
Andere Tipps
diese sed-Anweisung besagt, dass die ersten 7 Zeichen gelöscht werden.dot "." bedeutet irgendeinen Charakter.Es gibt einen noch einfacheren Weg, dies zu tun
awk '{print $2}' withLineNumbers.txt
sie müssen nur die 2. Spalte mit awk ausdrucken.Keine Notwendigkeit, Regex zu verwenden
wenn Ihre Daten Leerzeichen enthalten,
awk '{$1="";print substr($0,2)}' withLineNumbers.txt
sed führt ein Suchen und Ersetzen durch.Das 's' bedeutet Suche, das nächste Zeichen ('/') ist das Trennzeichen, der Suchausdruck ist '^.......', und der Ersetzungsausdruck ist eine leere Zeichenfolge (d. h.alles zwischen den letzten beiden Schrägstrichen).
Die Suche ist ein regulärer Ausdruck.Das '^' bedeutet übereinstimmender Zeilenanfang.Jeder '.' bedeutet, dass ein beliebiges Zeichen übereinstimmt.Der Suchausdruck stimmt also mit den ersten 7 Zeichen jeder Zeile überein.Dieser wird dann durch eine leere Zeichenfolge ersetzt.Sed entfernt also die ersten 7 Zeichen jeder Zeile.
Ein einfacherer Weg, um das gleiche zu erreichen, könnte sein:
cut -b8- withLineNumbers.txt > withoutLineNumbers.txt