Mit GNU sed:
sed 's/-[0-9]\+.*//' file
Ausgabe:
Mein Projekt mein besseres Projekt mein schickes projekt
Mit bash:
while read -r string; do [[ $string =~ (-[0-9]+.*) ]] && echo "$}" done < file
Mit GNU grep:
grep -oP '.*(?=-[0-9]+.*)' file
Ich versuche, die Bereitstellung von Kriegsdateien zu automatisieren, die von unserem Build-Server mithilfe von Maven generiert werden. Ich muss in der Lage sein, den Projektnamen aus dem Kriegsdateinamen zu extrahieren, damit ich die Datei vor der Bereitstellung umbenennen kann. (Weil Tomcat den Dateinamen als Standardkontextpfad verwendet und ich nicht möchte, dass die Version dort enthalten ist.)
Die Dateinamen sind normalerweise in der Form projectname-version
. z.B:
myproject-1.2.3-SNAPSHOT.war my-better-project-1.2.3-RELEASE.war my-fancy-project-1.2.3.war
Das Ergebnis sollte der Projektname ohne Versionsinformationen sein:
myproject my-better-project my-fancy-project
Wie kann ich dies mit bash und sed (oder nur bash) erreichen?
Mit GNU sed:
sed 's/-[0-9]\+.*//' file
Ausgabe:
Mein Projekt mein besseres Projekt mein schickes projekt
Mit bash:
while read -r string; do [[ $string =~ (-[0-9]+.*) ]] && echo "$}" done < file
Mit GNU grep:
grep -oP '.*(?=-[0-9]+.*)' file