Ersetzen Sie Dateiname durch Dateipfad durch Sed

1252
Alex Kahn

Ich möchte die Zeichenfolge ersetzen

/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.3.99/lib/cucumber.rb

mit der Schnur

/opt/local/lib/ruby/gems/1.8/gems/cucumber-0.3.99/lib/

in der Kommandozeile, wahrscheinlich mit sed. Ich kann nicht für den Rest von mir herausfinden, wie der Ersatzregex zu sed übergeht. Oder vielleicht ist sed nicht das richtige Werkzeug für die Arbeit. Jede Hilfe wäre dankbar.

0

1 Antwort auf die Frage

8
Marcin

no need for sed:

dirname /usr/local/bin/program

will return /usr/local/bin

Es gibt nicht einmal einen Bedarf für `dirname` :-). Wenn der String in "$ MYPROGRAM" gespeichert ist, entfernt "$ " alles einschließlich und nach dem letzten Schrägstrich, so dass der Pfad zu "MYPROGRAM" übrig bleibt. Dieses Erweiterungsverhalten wird von POSIX definiert. `dirname` verarbeitet relative Pfade und Dinge wie mehrere Schrägstriche jedoch besser. Daniel Andersson vor 12 Jahren 0
Ordentlich! Welche bash-Version muss funktionieren? `dirname` ist alt und standard genug, dass es fast überall funktioniert. Marcin vor 12 Jahren 0
@Marcin: funktioniert mit jeder Bash-Version; Es soll mit allen Standards (= POSIX) der Shell funktionieren. Wenn Sie auf einen Kommentar unter den Kommentaren antworten: Wenn Sie den Kommentar mit "@username" beginnen, wird dieser Benutzer über die Antwort über die Website benachrichtigt (ich habe gerade zufällig meinen Kommentar gefunden, eine Woche) später). Daniel Andersson vor 12 Jahren 0