2009-05-13 6 views
11

Wenn ich eine Liste von Text mit einer Zeichenfolge als Trennzeichen schneiden möchten, ist das möglich? Zum Beispiel habe ich ein Verzeichnis, in dem eine Liste von Shell-Skripten gleichen Perl-SkriptIst es möglich, eine Zeichenfolge als Trennzeichen im Unix-Cut-Befehl zu verwenden?

abc.pl 

So sagen rufen, wenn ich

$grep abc.pl * 

in diesem Verzeichnis zu tun, es gibt mir folgende Ergebnisse

xyz.sh: abc.pl 1 2 
xyz2.sh: abc.pl 2 
mno.sh: abc.pl 3 
pqr.sh: abc.pl 4 5 

Ich möchte im Grunde alle die Ausgabe nach "abc.pl" (um zu überprüfen, welche Bereich Argumente an die Perl gerade jetzt weitergegeben werden)

Als ich versuchte,

$grep abc.pl * | cut -d'abc.pl' -f2 

ODER

$grep abc.pl * | cut -d'abc\.pl' -f2 

seine geben mir

cut: invalid delimiter 

Wenn ich ein Mann für Schnitt lesen heißt es

delim ein multi- sein kann Byte-Zeichen.

Was mache ich hier falsch machen/zu interpretieren?

+0

sorry für die Formatierung Lemme richtigen paar Zeilen weiter oben so machen sie Sinn ... es gibt mir folgende Ergebnisse xyz.sh: abc.pl 1 2 xyz2.sh: abc.pl 2 mno.sh: abc.pl 3 pqr.sh: abc.pl 4 5 ... Als ich versuchte $ grep abc.pl * | cut -d'abc.pl '-f2 ODER $ grep abc.pl * | schneiden -d'abc.pl‘-f2 seiner geben mir geschnitten: ungültige Begrenzer ... Hoffe, dass die neuen Linien arbeiten diesmal :) –

+0

Nö :(nicht sicher, warum es nicht zeigt Zeilenumbrüche wie eingegeben :( –

+0

Sie meinen, die Manpages mit ZERO Anwendungsbeispielen haben es nicht klar gemacht? – Chance

Antwort

6

Wenn ich einen Mann für Schnitt lesen heißt es ... delim kann ein Multi-Byte-Zeichen sein.

Multi-Byte, aber nur ein Zeichen, keine Zeichenfolge.

canti:~$ ll | cut --delimiter="delim" -f 1,2 
cut: the delimiter must be a single character 
Try `cut --help' for more information. 

canti:~$ cut --version 
cut (GNU coreutils) 5.97 

Sie können nur Ausgabetrennzeichen als String (nutzlos in diesem Fall) angeben:

--output-delimiter=STRING               
     use STRING as the output delimiter the default is to use the input delimiter 
+0

Danke Alex .... –

5

warum nicht verwenden grep abc.pl | awk '{print $3, $4}'?

+0

funktioniert nicht so, wie ich es erwarte Ergebnisse zu zeigen Es zeigt teilweise Liste ... bin auch neugierig, was falsch ist mit der Art, die ich benutze geschnitten? –

+0

Ich habe nie Schnitt verwendet. Ihre Aufgabe schreit nach awk oder perl! – alamar

+0

Cool ... Danke Alamar ... aber ich werde die richtige Antwort auf Alex Antwort geben, als er wirklich antwortete, was ich suchte Ich wünschte, es gäbe eine Möglichkeit, zwei Antworten auszuwählen ... aber dann würde es viele andere Probs verursachen. Also danke für deine Hilfe. Wirklich zu schätzen :) –

0

$ grep abc.pl * | cut -d '' -f3-999

In diesem Fall verwenden Sie einfach das Leerzeichen als Trennzeichen.

+1

Keine Notwendigkeit, '999' einzuschließen - einfach' schneiden -d '' - f3-'. – jnylen

0

Oder Sie können versuchen, zB Rubin:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last' 
3

Versuchen Sie dies mit.

$grep abc.pl * | awk -F 'abc.pl' '{print $2}' 

-F fs --field Scheider fs fs Verwendung für das Eingabefeld Separator (der Wert des FS vordefinierten Variable).

Verwandte Themen