2016-11-18 9 views
2

Ich versuche, mit einem Skript zu formatieren vorwärts für Apache, was ich tun muss, ist eine URL, strip off die Domain und dann heften sich an das Ende der Zeile ein „/“ Wenn es dort nicht ein bereits jetzt das Skript, das ich mit gekommen sind, ist dies:wie "/" am Ende der Zeile hinzufügen, wenn es nicht mit sed

#!/bin/bash 
sed 's/http:\/\/www.mydomain.co.uk//g' address > address1 

sed -e 's/$/\//' address1 > address2 

jetzt wird dieses Skript die „http://www.mydomain.co.uk“ am Start Anfang und fügen Sie ein "/" am Ende, aber einige der URLs habe ich bereits das "/" dort. wie kann ich sed nur das "/" hinzufügen, wenn es nicht schon da ist?

Antwort

3

Spiel ein anderes Zeichen als ein Schrägstrich am Ende der Zeile und ersetzen mit dem Spiel (&) und einem Schrägstrich:

sed 's![^/]$!&/!' 

Um die Dinge ein wenig leichter zu machen, änderte ich den Begrenzer von / zu !, so dass die Schrägstriche in den Teilen zum Suchen/Ersetzen nicht maskiert werden müssen.

+1

hätte ich einfach (keine Rückreferenz) getan: 'sed -e 's # [^ /] $ # &/#'' –

+0

Ja, keine Notwendigkeit für eine Rückreferenz hier, danke. –

1
$ cat file 
abcd/ 
efgh 

$ sed 's:/\?$:/:g' file 
abcd/ 
efgh/ 
1

Eine andere Art und Weise zu tun:

$ echo 'http://www.mydomain.co.uk' | sed '/\/$/! s|$|/|' 
http://www.mydomain.co.uk/ 

$ echo 'http://www.mydomain.co.uk/' | sed '/\/$/! s|$|/|' 
http://www.mydomain.co.uk/ 

Mehrere Befehle als auch kombiniert werden können:

$ echo 'http://www.mydomain.co.uk/abc' | sed 's|http://www.mydomain.co.uk||g; /\/$/! s|$|/|' 
/abc/ 
$ echo 'http://www.mydomain.co.uk/abc/' | sed 's|http://www.mydomain.co.uk||g; /\/$/! s|$|/|' 
/abc/ 


Hinweise:

  • Könnte für Ihre Fälle funktionieren, aber . muss entgangen sein, um einen wörtlichen . für ex entsprechen: s|http://www\.mydomain\.co\.uk||g
  • g Flagge wird nur benötigt, wenn es mehr als eine Übereinstimmung in einer Linie ist
1

Es gibt keine Notwendigkeit, tun dies mit mehreren Befehlen:

$ cat file 
http://www.mydomain.co.uk/foo/ 
http://www.mydomain.co.uk/bar 

$ sed 's#http://www\.mydomain\.co\.uk\(.*[^/]\).*#\1/#' file 
/foo/ 
/bar/ 

Beachten Sie, dass . ein regexp metacharacter ist „ein beliebiges Zeichen“, das heißt, so dass Sie es entkommen müssen, wenn Sie es behandelt buchstäblich wollen.

Verwandte Themen