Text mehrmals zwischen zwei Strings extrahieren? (awk? sed?)

7

Ich habe eine Datei namens 'plainlinks', die so aussieht:

%Vor%

Ich muss eine Ausgabe erzeugen, die wie folgt aussieht:

%Vor%     
Mike Furlender 14.11.2012, 19:40
quelle

5 Antworten

11

Verwenden von sed :

%Vor%

Ausgabe:

%Vor%

Um die Änderungen in der Datei zu speichern, verwenden Sie die Option -i :

%Vor%

Oder in eine neue Datei speichern und dann umleiten:

%Vor%

Erläuterung:

%Vor%     
Chris Seymour 14.11.2012, 19:44
quelle
7

Nur zum Spaß.

awk -F\/ '{print substr(,0,12)}' plainlinks

oder mit grep

grep -Eo '[0-9]{6}-[0-9]{5}' plainlinks

    
matchew 14.11.2012 20:02
quelle
4

Wenn Sie davon ausgehen, dass das Format wie beschrieben konsistent bleibt, können Sie es mit awk :

machen %Vor%

Ausgabe:

%Vor%

Erläuterung :

  • awk liest Ihre Eingabedatei Zeile für Zeile und bricht jede Zeile in "Felder"
  • 'BEGIN{FS="[/-]"; OFS="-"} gibt an, dass das in den Eingabezeilen verwendete Trennzeichen entweder / oder - sein muss. Außerdem gibt es an, dass die Ausgabe durch - begrenzt werden soll.
  • {print , }' teilt awk mit, das 7. und 8. Feld jeder Zeile zu drucken, in diesem Fall 999999 und 9xxxx
  • plainlinks ist die Stelle, an der der Name der Eingabedatei
  • lautet
  • > output_file leitet die Ausgabe in eine Datei namens output_file um
sampson-chen 14.11.2012 19:46
quelle
4

Nur mit der Erweiterung der Shell-Parameter:

%Vor%     
glenn jackman 14.11.2012 19:54
quelle
1

Wenn das Format gleich bleibt, brauchen Sie weder sed noch awk:

%Vor%     
jfg956 15.11.2012 01:36
quelle

Tags und Links