2016-11-18 8 views
0

Ein Anruf von svn status gibt mir eine Liste von Dateien, die anders als in der SVN-Bild sind.Lösche bestimmte Länge des Teilstrings

D  subs/abc/deleted_sub.f90 
M  subs/abc/modified_sub.f90 
M  subs/abc/Makefile.Routinen 

Ich brauche eine Zeichenfolge compile_string zu gmake $compile_string.

Was ich nicht in meiner Zeichenfolge wollen, sind Dateien D für deleted und Makefile.Routinen Dateien deklariert.

Ich möchte auch nicht mit temporären Dateien arbeiten (Ich habe ein funktionierendes Skript, aber die Verwendung temporärer Dateien ist nicht wünschenswert).

Also las ich meine svn status in einen String:

comp_files=$(svn status) 

So bekomme ich eine lange Reihe D subs/abc/deleted_sub.f90 M subs/abc/modified_sub.f90 M subs/abc/Makefile.Routinen.

Wie kann ich jetzt den nächsten Dateipfad nach einem 'D' löschen oder wenn es eine Makefile.Routinen-Datei ist? Bitte

Antwort

1

versuchen

comp_files=$(svn status | grep -E -v '^D|Makefile.Routinen') 
+0

Dank, die sich wie ein Charme! –

1

awk eine gute Passform, wenn sie mit Spalten arbeiten

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/{print $2}') 
  • $1 != "D" ersten Spalte nicht Zeichenkette übereinstimmen sollte D
  • $2 !~ /Makefile\.Routinen/ zweite Spalte sollte nicht enthält die Zeichenfolge Makefile.Routinen
  • {print $2}, wenn beide Bedingungen erfüllen, zweite Spalte drucken


Wenn ganze Zeile Inhalt allein statt zweite Säule benötigt wird,

comp_files=$(svn status | awk '$1 != "D" && $2 !~ /Makefile\.Routinen/') 
Verwandte Themen