Ich möchte grep verwenden, um alle Header in einem Korpus zu finden, ich möchte alles bis zu finden: und alles danach ignorieren. Weiß jemand, wie man das macht? (Könnte ich eine komplette Codezeile bekommen)Grep Usage help
Antwort
Verwenden Sie sed oder awk.
A sed Beispiel:
sed -e '/^[^:]*$/d' -e 's/\(.*\):.*/\1/' filename
Wenn alles, was Sie tun möchten, ist der erste Teil der angepassten Linie angezeigt werden, dann können Sie sagen
grep your_pattern | cut -d: -f 1
aber wenn Sie wollen nicht gegen Daten übereinstimmen Nach dem Doppelpunkt benötigen Sie ein anderes Werkzeug. Es gibt viele Werkzeuge zur Verfügung sed
, awk
, perl
, python
usw. Zum Beispiel würde der Perl-Code etwas so aussehen
perl -nle '($s) = split /:/; print $s if $s =~ /your_pattern/'
oder die längere Skriptversion:
#!/usr/bin/perl
use strict;
use warnings;
while (my $line = <>) {
my $substring = split /:/, $line;
if ($substring =~ /your_pattern/) {
print "$substring\n";
}
}
(ich bin nicht sicher, ich verstehe Ihre Frage vollständig)
müssen Sie 'Grep' UND 'schneiden', eine Lösung (wenn auch weit von perfekt) wäre:
$ cat file | grep ':' | cut -f 1 -d ':'
sed -n '/^$/q;/:/{s/:.*/:/;p;}'
Dies stoppt, nachdem alle Header werden verarbeitet.
Edit: etwas verbesserte Version:
sed -n ‚/^$/q;/^ [^: \ t] {1,}:/{s /:.*/:/; p ;} '
Können Sie ein Beispiel für die Eingabe und die gewünschte Ausgabe angeben? –
Die Eingabe ist eine Liste von Spam-E-Mails mit langen Headern und die Ausgabe ist eine Datei mit den Kopfzeilen bis zu: wie Cc: oder An: – kman99
Will posten, was ich hatte, wenn ich zu den Cubes – kman99